react-native-inapp-inspector 2.3.5 → 2.3.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/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 +7 -0
- package/dist/commonjs/constants/telemetryConfig.js +10 -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 +302 -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 +7 -0
- package/dist/esm/constants/telemetryConfig.js +7 -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 +298 -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 +16 -0
- package/src/constants/version.ts +1 -1
- package/src/helpers/telemetry.ts +341 -0
- package/src/index.tsx +15 -1
- package/src/types/interfaces.ts +3 -0
package/dist/commonjs/index.js
CHANGED
|
@@ -42,41 +42,30 @@ exports.I18nextProvider = exports.setTranslations = exports.addTranslations = ex
|
|
|
42
42
|
const react_1 = __importStar(require("react"));
|
|
43
43
|
const react_native_1 = require("react-native");
|
|
44
44
|
const native_1 = require("@react-navigation/native");
|
|
45
|
-
// i18n
|
|
46
45
|
const i18n_1 = require("./i18n");
|
|
47
|
-
// Components
|
|
48
46
|
const ErrorBoundary_1 = __importDefault(require("./components/ErrorBoundary"));
|
|
49
47
|
const MainScreen_1 = __importDefault(require("./components/Inspector/MainScreen"));
|
|
50
48
|
const InspectorContext_1 = require("./components/Inspector/InspectorContext");
|
|
51
|
-
// Helpers
|
|
52
49
|
const helpers_1 = require("./helpers");
|
|
53
|
-
// #5 — settings persistence
|
|
54
50
|
const settingsStore_1 = require("./helpers/settingsStore");
|
|
55
51
|
const NativeInspector_1 = require("./native/NativeInspector");
|
|
56
|
-
// Network
|
|
57
52
|
const networkLogger_1 = require("./customHooks/networkLogger");
|
|
58
|
-
// Console
|
|
59
53
|
const consoleLogger_1 = require("./customHooks/consoleLogger");
|
|
60
54
|
const logFilters_1 = require("./customHooks/logFilters");
|
|
61
|
-
// Crash Protection
|
|
62
55
|
const crashHandler_1 = require("./customHooks/crashHandler");
|
|
56
|
+
const telemetry_1 = require("./helpers/telemetry");
|
|
63
57
|
const analyticsLogger_1 = require("./customHooks/analyticsLogger");
|
|
64
58
|
const reduxLogger_1 = require("./customHooks/reduxLogger");
|
|
65
59
|
const performanceTracker_1 = require("./customHooks/performanceTracker");
|
|
66
60
|
const bundleAnalyzer_1 = require("./customHooks/bundleAnalyzer");
|
|
67
61
|
const NativeInspector_2 = require("./native/NativeInspector");
|
|
68
62
|
const constants_1 = require("./constants");
|
|
69
|
-
// Stylesheet
|
|
70
63
|
const styles_1 = require("./styles");
|
|
71
64
|
const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, environment, initialVisible = false, visible: controlledVisible, }) => {
|
|
72
|
-
// Set custom storage synchronously during render phase
|
|
73
65
|
(0, settingsStore_1.setCustomStorage)(storage || null);
|
|
74
66
|
const [isDark, setIsDark] = (0, react_1.useState)(false);
|
|
75
67
|
const [reduxState, setReduxState] = (0, react_1.useState)(null);
|
|
76
|
-
// Per-reducer last action is kept in component state so the
|
|
77
|
-
// Redux tab re-renders live on every dispatch, independent of the state tree ref.
|
|
78
68
|
const [reduxLastActionMap, setReduxLastActionMap] = (0, react_1.useState)({});
|
|
79
|
-
// Inspector panel height as a percentage of the screen (configurable in Settings).
|
|
80
69
|
const [modalHeightPercent, setModalHeightPercent] = (0, react_1.useState)(90);
|
|
81
70
|
const [modalAnimationType, setModalAnimationType] = (0, react_1.useState)('slide');
|
|
82
71
|
const [logs, setLogs] = (0, react_1.useState)([]);
|
|
@@ -118,19 +107,15 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
118
107
|
const [collapsedSections, setCollapsedSections] = (0, react_1.useState)(new Set());
|
|
119
108
|
const [showHeaderInfo, setShowHeaderInfo] = (0, react_1.useState)(true);
|
|
120
109
|
const [sortOrder, setSortOrder] = (0, react_1.useState)('newest');
|
|
121
|
-
// #7 — sort order for the Logs (console) tab
|
|
122
110
|
const [logSortOrder, setLogSortOrder] = (0, react_1.useState)('newest');
|
|
123
111
|
const [reqExpanded, setReqExpanded] = (0, react_1.useState)(true);
|
|
124
112
|
const [resExpanded, setResExpanded] = (0, react_1.useState)(true);
|
|
125
113
|
const [showReqDiff, setShowReqDiff] = (0, react_1.useState)(false);
|
|
126
114
|
const [showResDiff, setShowResDiff] = (0, react_1.useState)(false);
|
|
127
|
-
// ─── Analytics state ───────────────────────────────────────────────────────
|
|
128
115
|
const [activeTab, setActiveTab] = (0, react_1.useState)('apis');
|
|
129
116
|
const [analyticsEvents, setAnalyticsEvents] = (0, react_1.useState)([]);
|
|
130
|
-
// ─── Logs state ────────────────────────────────────────────────────────────
|
|
131
117
|
const [consoleLogs, setConsoleLogs] = (0, react_1.useState)([]);
|
|
132
118
|
const [selectedLog, setSelectedLog] = (0, react_1.useState)(null);
|
|
133
|
-
// ─── Pause states ─────────────────────────────────────────────────────────
|
|
134
119
|
const [isNetworkPaused, setIsNetworkPaused] = (0, react_1.useState)(false);
|
|
135
120
|
const isNetworkPausedRef = (0, react_1.useRef)(isNetworkPaused);
|
|
136
121
|
isNetworkPausedRef.current = isNetworkPaused;
|
|
@@ -146,7 +131,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
146
131
|
const [lastReadLogsCount, setLastReadLogsCount] = (0, react_1.useState)(0);
|
|
147
132
|
const [lastReadApisCount, setLastReadApisCount] = (0, react_1.useState)(0);
|
|
148
133
|
const [lastReadCrashesCount, setLastReadCrashesCount] = (0, react_1.useState)(0);
|
|
149
|
-
// ─── Crash state ───────────────────────────────────────────────────────────
|
|
150
134
|
const [crashRecords, setCrashRecords] = (0, react_1.useState)(() => (0, crashHandler_1.getCrashRecords)());
|
|
151
135
|
const [selectedCrash, setSelectedCrash] = (0, react_1.useState)(null);
|
|
152
136
|
const [maxCrashLogs, setMaxCrashLogs] = (0, react_1.useState)(50);
|
|
@@ -213,7 +197,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
213
197
|
}, [consoleLogs, showConsoleLevels, maxConsoleLogs]);
|
|
214
198
|
const [logSearch, setLogSearch] = (0, react_1.useState)('');
|
|
215
199
|
const [logFilters, setLogFilters] = (0, react_1.useState)(new Set(['user-log']));
|
|
216
|
-
// ─── Settings state ──────────────────────────────────────────────────────────
|
|
217
200
|
const [settingsPage, setSettingsPage] = (0, react_1.useState)(null);
|
|
218
201
|
const [settingsActiveSubTab, setSettingsActiveSubTab] = (0, react_1.useState)('module');
|
|
219
202
|
const [tabVisibility, setTabVisibility] = (0, react_1.useState)({
|
|
@@ -233,11 +216,9 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
233
216
|
const [deviceFreeRamMb, setDeviceFreeRamMb] = (0, react_1.useState)(1800);
|
|
234
217
|
const [reduxAutoRefresh, setReduxAutoRefreshState] = (0, react_1.useState)(true);
|
|
235
218
|
const [reduxExpandDepth, setReduxExpandDepth] = (0, react_1.useState)(1);
|
|
236
|
-
// #6 — tab the inspector opens on. Shown with a DEFAULT badge in Settings.
|
|
237
219
|
const [defaultTab, setDefaultTab] = (0, react_1.useState)('apis');
|
|
238
220
|
const [showDuplicateLogs, setShowDuplicateLogs] = (0, react_1.useState)(false);
|
|
239
221
|
const [showUpdateToast, setShowUpdateToast] = (0, react_1.useState)(true);
|
|
240
|
-
// Synchronize runtime background listeners with active settings
|
|
241
222
|
(0, react_1.useEffect)(() => {
|
|
242
223
|
(0, networkLogger_1.setNetworkModuleEnabled)(!!tabVisibility.apis);
|
|
243
224
|
(0, consoleLogger_1.setConsoleModuleEnabled)(!!tabVisibility.logs);
|
|
@@ -247,7 +228,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
247
228
|
(0, crashHandler_1.setCrashModuleEnabled)(!!tabVisibility.crash);
|
|
248
229
|
(0, bundleAnalyzer_1.setBundleModuleEnabled)(!!tabVisibility.bundle);
|
|
249
230
|
}, [tabVisibility]);
|
|
250
|
-
// Query native hardware RAM and auto-tune limits if auto-RAM is active
|
|
251
231
|
(0, react_1.useEffect)(() => {
|
|
252
232
|
(0, NativeInspector_1.getNativeSystemMetrics)()
|
|
253
233
|
.then(metrics => {
|
|
@@ -301,7 +281,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
301
281
|
setShowUpdateToast(true);
|
|
302
282
|
react_native_1.Alert.alert('Settings Reset', 'All settings have been reset to default values.');
|
|
303
283
|
};
|
|
304
|
-
// #5 — hydrate persisted settings once, then auto-save on any change.
|
|
305
284
|
const settingsHydratedRef = (0, react_1.useRef)(false);
|
|
306
285
|
(0, react_1.useEffect)(() => {
|
|
307
286
|
let cancelled = false;
|
|
@@ -320,7 +299,7 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
320
299
|
setTabVisibility(prev => ({
|
|
321
300
|
...prev,
|
|
322
301
|
...saved.tabVisibility,
|
|
323
|
-
apis: true,
|
|
302
|
+
apis: true,
|
|
324
303
|
}));
|
|
325
304
|
if (saved.defaultTab)
|
|
326
305
|
setDefaultTab(saved.defaultTab);
|
|
@@ -405,8 +384,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
405
384
|
reduxExpandDepth,
|
|
406
385
|
showDuplicateLogs,
|
|
407
386
|
]);
|
|
408
|
-
// #1 — check NPM for a newer published version; surfaces an animated dot
|
|
409
|
-
// in the header next to the npm chip when an update is available.
|
|
410
387
|
const [latestNpmVersion, setLatestNpmVersion] = (0, react_1.useState)(null);
|
|
411
388
|
const updateAvailable = (0, react_1.useMemo)(() => {
|
|
412
389
|
if (!latestNpmVersion)
|
|
@@ -435,7 +412,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
435
412
|
}
|
|
436
413
|
})
|
|
437
414
|
.catch(() => {
|
|
438
|
-
// Offline / blocked — silently skip the update check.
|
|
439
415
|
});
|
|
440
416
|
return () => {
|
|
441
417
|
cancelled = true;
|
|
@@ -444,7 +420,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
444
420
|
(0, react_1.useEffect)(() => {
|
|
445
421
|
(0, reduxLogger_1.setReduxAutoRefresh)(reduxAutoRefresh);
|
|
446
422
|
}, [reduxAutoRefresh]);
|
|
447
|
-
// Auto-unselect Redux or Analytics tab if module is not connected / available
|
|
448
423
|
(0, react_1.useEffect)(() => {
|
|
449
424
|
if (activeTab === 'redux' && !(0, reduxLogger_1.isReduxConnected)()) {
|
|
450
425
|
setActiveTab('apis');
|
|
@@ -467,7 +442,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
467
442
|
(0, InspectorContext_1.animateNextLayout)();
|
|
468
443
|
setActiveTab('apis');
|
|
469
444
|
}
|
|
470
|
-
// #6 — a hidden module can't be the default landing tab.
|
|
471
445
|
if (!nextVal && defaultTab === key) {
|
|
472
446
|
setDefaultTab('apis');
|
|
473
447
|
}
|
|
@@ -625,12 +599,9 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
625
599
|
}
|
|
626
600
|
}
|
|
627
601
|
catch (err) {
|
|
628
|
-
// Safe check
|
|
629
602
|
}
|
|
630
603
|
};
|
|
631
|
-
// Initialize state
|
|
632
604
|
updateState();
|
|
633
|
-
// Listen to changes
|
|
634
605
|
const unsubscribe = typeof navigationRef.addListener === 'function'
|
|
635
606
|
? navigationRef.addListener('state', () => {
|
|
636
607
|
updateState();
|
|
@@ -648,11 +619,8 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
648
619
|
const pulseAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(1)).current;
|
|
649
620
|
const activePulseAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0.4)).current;
|
|
650
621
|
const unreadPulseAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(1)).current;
|
|
651
|
-
// #4 — diagonal light streak sweeping across the floating launcher
|
|
652
622
|
const fabShineAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
|
|
653
|
-
// #11 — header "clear all" icon spin/scale animation
|
|
654
623
|
const clearAnim = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
|
|
655
|
-
// #4 — draggable floating launcher (drag anywhere on screen)
|
|
656
624
|
const fabPan = (0, react_1.useRef)(new react_native_1.Animated.ValueXY({ x: 0, y: 0 })).current;
|
|
657
625
|
const fabPanRef = (0, react_1.useRef)({ x: 0, y: 0 });
|
|
658
626
|
(0, react_1.useEffect)(() => {
|
|
@@ -665,8 +633,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
665
633
|
}, [fabPan]);
|
|
666
634
|
const fabDraggedRef = (0, react_1.useRef)(false);
|
|
667
635
|
const fabPanResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
|
|
668
|
-
// Let taps fall through to the launcher; only hijack once the
|
|
669
|
-
// finger actually moves, so onPress still fires on a tap.
|
|
670
636
|
onStartShouldSetPanResponder: () => false,
|
|
671
637
|
onMoveShouldSetPanResponder: (_e, g) => Math.abs(g.dx) > 4 || Math.abs(g.dy) > 4,
|
|
672
638
|
onPanResponderGrant: () => {
|
|
@@ -682,7 +648,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
682
648
|
}),
|
|
683
649
|
onPanResponderRelease: () => {
|
|
684
650
|
fabPan.flattenOffset();
|
|
685
|
-
// small delay so the trailing tap (if any) is ignored
|
|
686
651
|
setTimeout(() => {
|
|
687
652
|
fabDraggedRef.current = false;
|
|
688
653
|
}, 50);
|
|
@@ -692,8 +657,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
692
657
|
fabDraggedRef.current = false;
|
|
693
658
|
},
|
|
694
659
|
})).current;
|
|
695
|
-
// #2 — scroll-to-top button for the main APIs list, always visible at the
|
|
696
|
-
// bottom right of the list.
|
|
697
660
|
const runClearAllWithAnimation = (0, react_1.useCallback)(() => {
|
|
698
661
|
react_native_1.Animated.sequence([
|
|
699
662
|
react_native_1.Animated.timing(clearAnim, {
|
|
@@ -730,7 +693,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
730
693
|
loop.start();
|
|
731
694
|
return () => loop.stop();
|
|
732
695
|
}, [pulseAnim]);
|
|
733
|
-
// #4 — sweep the shine streak across the launcher, pause, repeat.
|
|
734
696
|
(0, react_1.useEffect)(() => {
|
|
735
697
|
const loop = react_native_1.Animated.loop(react_native_1.Animated.sequence([
|
|
736
698
|
react_native_1.Animated.timing(fabShineAnim, {
|
|
@@ -782,7 +744,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
782
744
|
}, [unreadPulseAnim]);
|
|
783
745
|
const isNativeModule = (0, react_1.useMemo)(() => (0, NativeInspector_2.isNativeModuleAvailable)(), []);
|
|
784
746
|
const useNativeFab = (react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') && isNativeModule;
|
|
785
|
-
// 100% Native Main-Thread Floating Button Lifecycle
|
|
786
747
|
(0, react_1.useEffect)(() => {
|
|
787
748
|
if (!useNativeFab || !enabled) {
|
|
788
749
|
if (useNativeFab) {
|
|
@@ -809,7 +770,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
809
770
|
logs.length,
|
|
810
771
|
analyticsEvents.length,
|
|
811
772
|
]);
|
|
812
|
-
// Subscribe to native UI-thread floating button tap events
|
|
813
773
|
(0, react_1.useEffect)(() => {
|
|
814
774
|
if (!useNativeFab)
|
|
815
775
|
return;
|
|
@@ -820,7 +780,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
820
780
|
unsubscribe();
|
|
821
781
|
};
|
|
822
782
|
}, [useNativeFab]);
|
|
823
|
-
// Subscribe to physical hardware shake events (or Cmd+Ctrl+Z on iOS simulator)
|
|
824
783
|
(0, react_1.useEffect)(() => {
|
|
825
784
|
if (!useNativeFab)
|
|
826
785
|
return;
|
|
@@ -832,7 +791,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
832
791
|
};
|
|
833
792
|
}, [useNativeFab]);
|
|
834
793
|
const isVisibleRefObj = (0, react_1.useRef)(visible);
|
|
835
|
-
// #6 — every time the inspector is opened, land on chosen default tab & sync latest logs
|
|
836
794
|
(0, react_1.useEffect)(() => {
|
|
837
795
|
isVisibleRefObj.current = visible;
|
|
838
796
|
if (visible) {
|
|
@@ -840,7 +798,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
840
798
|
? defaultTab
|
|
841
799
|
: 'apis';
|
|
842
800
|
setActiveTab(target);
|
|
843
|
-
// Instant synchronization of data collected while modal was closed
|
|
844
801
|
if (latestNetworkLogsRef.current.length > 0) {
|
|
845
802
|
const deduped = (0, helpers_1.deduplicateLogs)(latestNetworkLogsRef.current);
|
|
846
803
|
const incoming = new Set(deduped.map(l => l.id));
|
|
@@ -896,8 +853,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
896
853
|
setCrashRecords(updated);
|
|
897
854
|
}
|
|
898
855
|
});
|
|
899
|
-
// Sync crashes recorded before this subscription ran (e.g. a render crash
|
|
900
|
-
// during the very first commit, which fires before effects are mounted).
|
|
901
856
|
const pendingCrashes = (0, crashHandler_1.getCrashRecords)();
|
|
902
857
|
if (pendingCrashes.length > 0) {
|
|
903
858
|
pendingCrashes.forEach(c => (0, NativeInspector_1.pushNativeLogRecord)('crash', JSON.stringify(c)));
|
|
@@ -913,7 +868,7 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
913
868
|
if (isNetworkPausedRef.current)
|
|
914
869
|
return;
|
|
915
870
|
if (!isVisibleRef.current)
|
|
916
|
-
return;
|
|
871
|
+
return;
|
|
917
872
|
clearTimeout(timeoutId);
|
|
918
873
|
const updateNetworkState = () => {
|
|
919
874
|
const deduped = (0, helpers_1.deduplicateLogs)(raw);
|
|
@@ -954,7 +909,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
954
909
|
timeoutId = setTimeout(updateNetworkState, 250);
|
|
955
910
|
}
|
|
956
911
|
});
|
|
957
|
-
// ─── Analytics subscription ──────────────────────────────────────────────
|
|
958
912
|
let analyticsTimeoutId;
|
|
959
913
|
let isFirstAnalyticsCall = true;
|
|
960
914
|
const unsubscribeAnalytics = (0, analyticsLogger_1.subscribeAnalyticsEvents)((raw) => {
|
|
@@ -965,7 +919,7 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
965
919
|
if (isAnalyticsPausedRef.current)
|
|
966
920
|
return;
|
|
967
921
|
if (!isVisibleRef.current)
|
|
968
|
-
return;
|
|
922
|
+
return;
|
|
969
923
|
clearTimeout(analyticsTimeoutId);
|
|
970
924
|
const updateAnalyticsState = () => {
|
|
971
925
|
const incoming = new Set(raw.map(e => e.id));
|
|
@@ -996,7 +950,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
996
950
|
analyticsTimeoutId = setTimeout(updateAnalyticsState, 200);
|
|
997
951
|
}
|
|
998
952
|
});
|
|
999
|
-
// ─── Console subscription ────────────────────────────────────────────────
|
|
1000
953
|
let consoleTimeoutId;
|
|
1001
954
|
let isFirstConsoleCall = true;
|
|
1002
955
|
const unsubscribeConsole = (0, consoleLogger_1.subscribeConsoleLogs)((raw) => {
|
|
@@ -1007,7 +960,7 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1007
960
|
if (isConsolePausedRef.current)
|
|
1008
961
|
return;
|
|
1009
962
|
if (!isVisibleRef.current)
|
|
1010
|
-
return;
|
|
963
|
+
return;
|
|
1011
964
|
clearTimeout(consoleTimeoutId);
|
|
1012
965
|
if (isFirstConsoleCall) {
|
|
1013
966
|
isFirstConsoleCall = false;
|
|
@@ -1026,7 +979,7 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1026
979
|
}
|
|
1027
980
|
const unsubscribeRedux = (0, reduxLogger_1.subscribeReduxState)(() => {
|
|
1028
981
|
if (!isVisibleRef.current)
|
|
1029
|
-
return;
|
|
982
|
+
return;
|
|
1030
983
|
const freshState = (0, reduxLogger_1.getReduxState)();
|
|
1031
984
|
setReduxState(freshState && typeof freshState === 'object' ? { ...freshState } : freshState);
|
|
1032
985
|
setReduxLastActionMap({ ...(0, reduxLogger_1.getLastActionForReducer)() });
|
|
@@ -1074,7 +1027,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1074
1027
|
}, [selected]);
|
|
1075
1028
|
const filteredLogs = (0, react_1.useMemo)(() => {
|
|
1076
1029
|
let result = logs.filter(log => {
|
|
1077
|
-
// 1. Quick Filter Check (All, Errors, Success, Slow, GET, POST, GraphQL)
|
|
1078
1030
|
if (quickFilter && quickFilter !== 'all') {
|
|
1079
1031
|
if (quickFilter === 'errors') {
|
|
1080
1032
|
const isErr = log.status === 0 ||
|
|
@@ -1107,7 +1059,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1107
1059
|
}
|
|
1108
1060
|
}
|
|
1109
1061
|
}
|
|
1110
|
-
// 2. Status Filter Check (from filters accordion dropdown)
|
|
1111
1062
|
if (statusFilters.size > 0) {
|
|
1112
1063
|
const matched = [...statusFilters].some(f => {
|
|
1113
1064
|
if (f === 'ALL')
|
|
@@ -1123,7 +1074,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1123
1074
|
if (!matched)
|
|
1124
1075
|
return false;
|
|
1125
1076
|
}
|
|
1126
|
-
// 3. Method Filter Check (from filters accordion dropdown)
|
|
1127
1077
|
if (methodFilters.size > 0) {
|
|
1128
1078
|
const matchedMethod = [...methodFilters].some(m => {
|
|
1129
1079
|
if (m === 'ALL')
|
|
@@ -1133,7 +1083,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1133
1083
|
if (!matchedMethod)
|
|
1134
1084
|
return false;
|
|
1135
1085
|
}
|
|
1136
|
-
// 4. Advanced Search Query Engine Check with Scope, Regex and Case-Sensitivity
|
|
1137
1086
|
if (search && search.trim().length > 0) {
|
|
1138
1087
|
const routePath = logRouteMapRef.current.get(log.id)?.path || '';
|
|
1139
1088
|
const isMatch = (0, helpers_1.matchNetworkLogQuery)(log, search, routePath, {
|
|
@@ -1149,7 +1098,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1149
1098
|
if (sortOrder === 'oldest') {
|
|
1150
1099
|
result = [...result].reverse();
|
|
1151
1100
|
}
|
|
1152
|
-
// #9 — collapse consecutive identical requests
|
|
1153
1101
|
if (!showDuplicateLogs) {
|
|
1154
1102
|
const collapsed = [];
|
|
1155
1103
|
for (const log of result) {
|
|
@@ -1299,7 +1247,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1299
1247
|
const prevResponseData = prevSameRequest ? prevSameRequest.response : null;
|
|
1300
1248
|
const filteredAnalyticsEvents = (0, react_1.useMemo)(() => {
|
|
1301
1249
|
let events = analyticsEvents;
|
|
1302
|
-
// Search query filter
|
|
1303
1250
|
if (analyticsSearch && analyticsSearch.trim().length > 0) {
|
|
1304
1251
|
const queryTokens = analyticsSearch.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
1305
1252
|
events = events.filter(e => {
|
|
@@ -1315,14 +1262,12 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1315
1262
|
return queryTokens.every(token => searchTarget.includes(token));
|
|
1316
1263
|
});
|
|
1317
1264
|
}
|
|
1318
|
-
// Category filter
|
|
1319
1265
|
if (analyticsFilters.categories.size > 0 && !analyticsFilters.categories.has('all')) {
|
|
1320
1266
|
events = events.filter(e => {
|
|
1321
1267
|
const cat = (0, helpers_1.getEventCategory)(e.name);
|
|
1322
1268
|
return analyticsFilters.categories.has(cat);
|
|
1323
1269
|
});
|
|
1324
1270
|
}
|
|
1325
|
-
// Time window filter
|
|
1326
1271
|
if (analyticsFilters.timeWindow !== 'all') {
|
|
1327
1272
|
const now = Date.now();
|
|
1328
1273
|
const cutoff = analyticsFilters.timeWindow === '1m'
|
|
@@ -1334,11 +1279,9 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1334
1279
|
: now - 60 * 60 * 1000;
|
|
1335
1280
|
events = events.filter(e => e.timestamp >= cutoff);
|
|
1336
1281
|
}
|
|
1337
|
-
// Source filter
|
|
1338
1282
|
if (analyticsFilters.sources.size > 0 && !analyticsFilters.sources.has('all')) {
|
|
1339
1283
|
events = events.filter(e => analyticsFilters.sources.has(e.source || 'manual'));
|
|
1340
1284
|
}
|
|
1341
|
-
// User identification filter
|
|
1342
1285
|
if (analyticsFilters.userTypes.size > 0 && !analyticsFilters.userTypes.has('all')) {
|
|
1343
1286
|
events = events.filter(e => {
|
|
1344
1287
|
const isIdentified = Boolean(e.userId && e.userId.trim() !== '');
|
|
@@ -1349,7 +1292,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1349
1292
|
return false;
|
|
1350
1293
|
});
|
|
1351
1294
|
}
|
|
1352
|
-
// Payload complexity filter
|
|
1353
1295
|
if (analyticsFilters.payloadComplexity !== 'all') {
|
|
1354
1296
|
if (analyticsFilters.payloadComplexity === 'none') {
|
|
1355
1297
|
events = events.filter(e => !e.params || Object.keys(e.params).length === 0);
|
|
@@ -1361,7 +1303,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1361
1303
|
events = events.filter(e => e.params && Object.keys(e.params).length > 3);
|
|
1362
1304
|
}
|
|
1363
1305
|
}
|
|
1364
|
-
// Conversion / Goal events filter
|
|
1365
1306
|
if (analyticsFilters.onlyConversions) {
|
|
1366
1307
|
const CONVERSION_PATTERNS = [
|
|
1367
1308
|
'purchase',
|
|
@@ -1378,7 +1319,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1378
1319
|
];
|
|
1379
1320
|
events = events.filter(e => CONVERSION_PATTERNS.some(pat => e.name.toLowerCase().includes(pat)));
|
|
1380
1321
|
}
|
|
1381
|
-
// Screen filter
|
|
1382
1322
|
if (analyticsFilters.screens.size > 0) {
|
|
1383
1323
|
events = events.filter(e => {
|
|
1384
1324
|
const scr = e.screenName ||
|
|
@@ -1390,24 +1330,19 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1390
1330
|
return analyticsFilters.screens.has(scr);
|
|
1391
1331
|
});
|
|
1392
1332
|
}
|
|
1393
|
-
// Has Revenue filter
|
|
1394
1333
|
if (analyticsFilters.hasRevenue) {
|
|
1395
1334
|
events = events.filter(e => (e.params?.value != null && !isNaN(Number(e.params.value))) ||
|
|
1396
1335
|
(e.params?.price != null && !isNaN(Number(e.params.price))));
|
|
1397
1336
|
}
|
|
1398
|
-
// Has Items filter
|
|
1399
1337
|
if (analyticsFilters.hasItems) {
|
|
1400
1338
|
events = events.filter(e => Array.isArray(e.params?.items) && e.params.items.length > 0);
|
|
1401
1339
|
}
|
|
1402
|
-
// Has User Props filter
|
|
1403
1340
|
if (analyticsFilters.hasUserProps) {
|
|
1404
1341
|
events = events.filter(e => e.userProperties && Object.keys(e.userProperties).length > 0);
|
|
1405
1342
|
}
|
|
1406
|
-
// Has Params filter
|
|
1407
1343
|
if (analyticsFilters.hasParams) {
|
|
1408
1344
|
events = events.filter(e => e.params && Object.keys(e.params).length > 0);
|
|
1409
1345
|
}
|
|
1410
|
-
// Deduplication
|
|
1411
1346
|
const deduplicatedEvents = [];
|
|
1412
1347
|
for (const e of events) {
|
|
1413
1348
|
if (deduplicatedEvents.length === 0) {
|
|
@@ -1419,7 +1354,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1419
1354
|
JSON.stringify(last.params) === JSON.stringify(e.params) &&
|
|
1420
1355
|
JSON.stringify(last.userProperties) === JSON.stringify(e.userProperties)) {
|
|
1421
1356
|
last.count = (last.count || 1) + 1;
|
|
1422
|
-
// Point to the newest timestamp and id
|
|
1423
1357
|
last.timestamp = e.timestamp;
|
|
1424
1358
|
last.id = e.id;
|
|
1425
1359
|
}
|
|
@@ -1428,11 +1362,9 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1428
1362
|
}
|
|
1429
1363
|
}
|
|
1430
1364
|
let result = deduplicatedEvents;
|
|
1431
|
-
// Only duplicates filter
|
|
1432
1365
|
if (analyticsFilters.onlyDuplicates) {
|
|
1433
1366
|
result = result.filter(e => (e.count || 1) > 1);
|
|
1434
1367
|
}
|
|
1435
|
-
// Sorting
|
|
1436
1368
|
if (analyticsFilters.sortBy === 'time_asc') {
|
|
1437
1369
|
result = [...result].sort((a, b) => a.timestamp - b.timestamp);
|
|
1438
1370
|
}
|
|
@@ -1450,7 +1382,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1450
1382
|
}, [analyticsEvents, analyticsSearch, analyticsFilters, maxAnalyticsEventsLimit]);
|
|
1451
1383
|
const filteredConsoleLogs = (0, react_1.useMemo)(() => {
|
|
1452
1384
|
let result = visibleConsoleLogs;
|
|
1453
|
-
// Filters check
|
|
1454
1385
|
if (logFilters.size > 0 && !logFilters.has('all')) {
|
|
1455
1386
|
result = result.filter(log => {
|
|
1456
1387
|
if (logFilters.has(log.type))
|
|
@@ -1463,7 +1394,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1463
1394
|
return false;
|
|
1464
1395
|
});
|
|
1465
1396
|
}
|
|
1466
|
-
// Comprehensive Search bar check
|
|
1467
1397
|
if (logSearch && logSearch.trim().length > 0) {
|
|
1468
1398
|
const queryTokens = logSearch.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
1469
1399
|
result = result.filter(log => {
|
|
@@ -1497,12 +1427,9 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1497
1427
|
});
|
|
1498
1428
|
});
|
|
1499
1429
|
}
|
|
1500
|
-
// #7 — apply sort order (newest/oldest first)
|
|
1501
1430
|
result = [...result].sort((a, b) => logSortOrder === 'newest'
|
|
1502
1431
|
? b.timestamp - a.timestamp
|
|
1503
1432
|
: a.timestamp - b.timestamp);
|
|
1504
|
-
// #9 — collapse consecutive identical messages into one row with a ×N
|
|
1505
|
-
// counter unless duplicates are explicitly enabled in Settings.
|
|
1506
1433
|
if (!showDuplicateLogs) {
|
|
1507
1434
|
const collapsed = [];
|
|
1508
1435
|
for (const log of result) {
|
|
@@ -1574,11 +1501,9 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1574
1501
|
setMethodFilters(new Set());
|
|
1575
1502
|
prevLogIdsRef.current = new Set();
|
|
1576
1503
|
logRouteMapRef.current = new Map();
|
|
1577
|
-
// Also clear analytics
|
|
1578
1504
|
(0, analyticsLogger_1.clearAnalyticsEvents)();
|
|
1579
1505
|
setAnalyticsEvents([]);
|
|
1580
1506
|
prevEventIdsRef.current = new Set();
|
|
1581
|
-
// Also clear console logs
|
|
1582
1507
|
(0, consoleLogger_1.clearConsoleLogs)();
|
|
1583
1508
|
setConsoleLogs([]);
|
|
1584
1509
|
}
|
|
@@ -1642,7 +1567,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1642
1567
|
]);
|
|
1643
1568
|
return;
|
|
1644
1569
|
}
|
|
1645
|
-
// Default: APIs tab. Only clears NETWORK logs — never touches the other tabs.
|
|
1646
1570
|
if (selectedLogs.size > 0) {
|
|
1647
1571
|
setLogs(prev => prev.filter(l => !selectedLogs.has(l.id)));
|
|
1648
1572
|
setSelectedLogs(new Set());
|
|
@@ -1658,7 +1582,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1658
1582
|
]);
|
|
1659
1583
|
}
|
|
1660
1584
|
}
|
|
1661
|
-
// Clears ONLY network logs + their derived selection/filter state.
|
|
1662
1585
|
function clearNetworkOnly() {
|
|
1663
1586
|
(0, networkLogger_1.clearNetworkLogs)();
|
|
1664
1587
|
setLogs([]);
|
|
@@ -1697,7 +1620,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1697
1620
|
});
|
|
1698
1621
|
}, []);
|
|
1699
1622
|
const contextValue = {
|
|
1700
|
-
// ─── Modal / launcher ───────────────────────────────────────────────
|
|
1701
1623
|
visible,
|
|
1702
1624
|
setVisible,
|
|
1703
1625
|
closeModal,
|
|
@@ -1712,14 +1634,12 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1712
1634
|
setModalAnimationType,
|
|
1713
1635
|
hasNavigationContext,
|
|
1714
1636
|
setNavState,
|
|
1715
|
-
// ─── Tabs ───────────────────────────────────────────────────────────
|
|
1716
1637
|
activeTab,
|
|
1717
1638
|
switchActiveTab,
|
|
1718
1639
|
tabVisibility,
|
|
1719
1640
|
toggleTabVisibility,
|
|
1720
1641
|
lastReadApisCount,
|
|
1721
1642
|
lastReadLogsCount,
|
|
1722
|
-
// ─── Selection / header state ───────────────────────────────────────
|
|
1723
1643
|
selected,
|
|
1724
1644
|
setSelected,
|
|
1725
1645
|
selectedEvent,
|
|
@@ -1736,14 +1656,12 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1736
1656
|
activePulseAnim,
|
|
1737
1657
|
unreadPulseAnim,
|
|
1738
1658
|
runClearAllWithAnimation,
|
|
1739
|
-
// ─── FAB / launcher ─────────────────────────────────────────────────
|
|
1740
1659
|
useNativeFab,
|
|
1741
1660
|
fabPan,
|
|
1742
1661
|
fabPanResponder,
|
|
1743
1662
|
fabDraggedRef,
|
|
1744
1663
|
pulseAnim,
|
|
1745
1664
|
fabShineAnim,
|
|
1746
|
-
// ─── Network (APIs) ─────────────────────────────────────────────────
|
|
1747
1665
|
logs,
|
|
1748
1666
|
filteredLogs,
|
|
1749
1667
|
groupedData,
|
|
@@ -1774,7 +1692,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1774
1692
|
handleDelete,
|
|
1775
1693
|
isNetworkPaused,
|
|
1776
1694
|
setIsNetworkPaused,
|
|
1777
|
-
// ─── Network detail ─────────────────────────────────────────────────
|
|
1778
1695
|
detailTitle,
|
|
1779
1696
|
detailDisplayUrl,
|
|
1780
1697
|
apiDetailActiveTab,
|
|
@@ -1792,7 +1709,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1792
1709
|
prevRequestData,
|
|
1793
1710
|
prevResponseData,
|
|
1794
1711
|
logRouteMapRef,
|
|
1795
|
-
// ─── Console (Logs) ─────────────────────────────────────────────────
|
|
1796
1712
|
consoleLogs,
|
|
1797
1713
|
visibleConsoleLogs,
|
|
1798
1714
|
filteredConsoleLogs,
|
|
@@ -1805,7 +1721,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1805
1721
|
setLogSortOrder,
|
|
1806
1722
|
isConsolePaused,
|
|
1807
1723
|
setIsConsolePaused,
|
|
1808
|
-
// ─── Analytics ──────────────────────────────────────────────────────
|
|
1809
1724
|
analyticsEvents,
|
|
1810
1725
|
filteredAnalyticsEvents,
|
|
1811
1726
|
analyticsSearch,
|
|
@@ -1821,7 +1736,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1821
1736
|
setAnalyticsHeaderExpanded,
|
|
1822
1737
|
isAnalyticsPaused,
|
|
1823
1738
|
setIsAnalyticsPaused,
|
|
1824
|
-
// ─── Redux ──────────────────────────────────────────────────────────
|
|
1825
1739
|
reduxState,
|
|
1826
1740
|
setReduxState,
|
|
1827
1741
|
reduxLastActionMap,
|
|
@@ -1833,7 +1747,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1833
1747
|
setSelectedReduxAction,
|
|
1834
1748
|
reduxActiveSubTab,
|
|
1835
1749
|
setReduxActiveSubTab,
|
|
1836
|
-
// ─── Crash ───────────────────────────────────────────────────────────
|
|
1837
1750
|
crashRecords,
|
|
1838
1751
|
setCrashRecords,
|
|
1839
1752
|
selectedCrash,
|
|
@@ -1846,7 +1759,6 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1846
1759
|
setCrashRecords([]);
|
|
1847
1760
|
setSelectedCrash(null);
|
|
1848
1761
|
},
|
|
1849
|
-
// ─── Settings ───────────────────────────────────────────────────────
|
|
1850
1762
|
settingsActiveSubTab,
|
|
1851
1763
|
setSettingsActiveSubTab,
|
|
1852
1764
|
defaultTab,
|
|
@@ -1881,15 +1793,22 @@ const NetworkInspector = ({ enabled = true, storage, navigationRef, appIcon, env
|
|
|
1881
1793
|
};
|
|
1882
1794
|
const NetworkInspectorWrapper = (props) => {
|
|
1883
1795
|
const enabled = props?.enabled ?? true;
|
|
1796
|
+
const telemetry = props?.telemetry ?? true;
|
|
1884
1797
|
(0, react_1.useEffect)(() => {
|
|
1885
1798
|
if (!enabled) {
|
|
1886
1799
|
(0, NativeInspector_2.hideNativeFloatingButton)().catch(() => { });
|
|
1800
|
+
(0, telemetry_1.setTelemetryEnabled)(false);
|
|
1801
|
+
}
|
|
1802
|
+
else if (telemetry) {
|
|
1803
|
+
(0, telemetry_1.trackActiveTelemetryHeartbeat)(true, props?.environment);
|
|
1804
|
+
}
|
|
1805
|
+
else {
|
|
1806
|
+
(0, telemetry_1.setTelemetryEnabled)(false);
|
|
1887
1807
|
}
|
|
1888
1808
|
return () => {
|
|
1889
1809
|
(0, NativeInspector_2.hideNativeFloatingButton)().catch(() => { });
|
|
1890
1810
|
};
|
|
1891
|
-
}, [enabled]);
|
|
1892
|
-
// If enabled is false, return null immediately with 0 overhead
|
|
1811
|
+
}, [enabled, telemetry, props?.environment]);
|
|
1893
1812
|
if (!enabled) {
|
|
1894
1813
|
return null;
|
|
1895
1814
|
}
|
|
@@ -1900,7 +1819,6 @@ const NetworkInspectorWrapper = (props) => {
|
|
|
1900
1819
|
</i18n_1.I18nextProvider>);
|
|
1901
1820
|
};
|
|
1902
1821
|
exports.default = NetworkInspectorWrapper;
|
|
1903
|
-
// Re-export public APIs
|
|
1904
1822
|
var networkLogger_2 = require("./customHooks/networkLogger");
|
|
1905
1823
|
Object.defineProperty(exports, "setupNetworkLogger", { enumerable: true, get: function () { return networkLogger_2.setupNetworkLogger; } });
|
|
1906
1824
|
Object.defineProperty(exports, "clearNetworkLogs", { enumerable: true, get: function () { return networkLogger_2.clearNetworkLogs; } });
|