react-native-inapp-inspector 2.2.1 → 2.2.2
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/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
- package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/9.2.0/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build/reports/problems/problems-report.html +659 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +28 -6
- package/dist/commonjs/analytics.d.ts +7 -0
- package/dist/commonjs/analytics.js +28 -0
- package/dist/commonjs/bundle.d.ts +6 -0
- package/dist/commonjs/bundle.js +20 -0
- package/dist/commonjs/console.d.ts +7 -0
- package/dist/commonjs/console.js +20 -0
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/crash.d.ts +7 -0
- package/dist/commonjs/crash.js +27 -0
- package/dist/commonjs/customHooks/analyticsLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/analyticsLogger.js +23 -2
- package/dist/commonjs/customHooks/consoleLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/consoleLogger.js +24 -4
- package/dist/commonjs/customHooks/crashHandler.d.ts +2 -0
- package/dist/commonjs/customHooks/crashHandler.js +15 -1
- package/dist/commonjs/customHooks/networkLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/networkLogger.js +23 -2
- package/dist/commonjs/customHooks/performanceTracker.d.ts +3 -0
- package/dist/commonjs/customHooks/performanceTracker.js +34 -3
- package/dist/commonjs/customHooks/reduxLogger.d.ts +3 -0
- package/dist/commonjs/customHooks/reduxLogger.js +24 -4
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +1 -0
- package/dist/commonjs/helpers/memoryManager.d.ts +29 -0
- package/dist/commonjs/helpers/memoryManager.js +112 -0
- package/dist/commonjs/helpers/telemetry.js +4 -4
- package/dist/commonjs/index.d.ts +7 -1
- package/dist/commonjs/index.js +36 -2
- package/dist/commonjs/network.d.ts +6 -0
- package/dist/commonjs/network.js +17 -0
- package/dist/commonjs/performance.d.ts +6 -0
- package/dist/commonjs/performance.js +33 -0
- package/dist/commonjs/redux.d.ts +5 -0
- package/dist/commonjs/redux.js +24 -0
- package/dist/esm/analytics.d.ts +7 -0
- package/dist/esm/analytics.js +6 -0
- package/dist/esm/bundle.d.ts +6 -0
- package/dist/esm/bundle.js +6 -0
- package/dist/esm/console.d.ts +7 -0
- package/dist/esm/console.js +6 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/crash.d.ts +7 -0
- package/dist/esm/crash.js +6 -0
- package/dist/esm/customHooks/analyticsLogger.d.ts +3 -0
- package/dist/esm/customHooks/analyticsLogger.js +19 -1
- package/dist/esm/customHooks/consoleLogger.d.ts +3 -0
- package/dist/esm/customHooks/consoleLogger.js +20 -3
- package/dist/esm/customHooks/crashHandler.d.ts +2 -0
- package/dist/esm/customHooks/crashHandler.js +12 -0
- package/dist/esm/customHooks/networkLogger.d.ts +3 -0
- package/dist/esm/customHooks/networkLogger.js +19 -1
- package/dist/esm/customHooks/performanceTracker.d.ts +3 -0
- package/dist/esm/customHooks/performanceTracker.js +30 -2
- package/dist/esm/customHooks/reduxLogger.d.ts +3 -0
- package/dist/esm/customHooks/reduxLogger.js +20 -3
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +1 -0
- package/dist/esm/helpers/memoryManager.d.ts +29 -0
- package/dist/esm/helpers/memoryManager.js +104 -0
- package/dist/esm/helpers/telemetry.js +4 -4
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.js +17 -3
- package/dist/esm/network.d.ts +6 -0
- package/dist/esm/network.js +5 -0
- package/dist/esm/performance.d.ts +6 -0
- package/dist/esm/performance.js +6 -0
- package/dist/esm/redux.d.ts +5 -0
- package/dist/esm/redux.js +5 -0
- package/package.json +52 -2
|
@@ -111,6 +111,24 @@ export const clearNetworkLogs = () => {
|
|
|
111
111
|
notify();
|
|
112
112
|
};
|
|
113
113
|
export const getNetworkLogs = () => [...logs];
|
|
114
|
+
let maxNetworkLogsLimit = 100;
|
|
115
|
+
export const setMaxNetworkLogsLimit = (limit) => {
|
|
116
|
+
maxNetworkLogsLimit = Math.max(10, limit);
|
|
117
|
+
if (logs.length > maxNetworkLogsLimit) {
|
|
118
|
+
logs = logs.slice(0, maxNetworkLogsLimit);
|
|
119
|
+
notify();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
export const getMaxNetworkLogsLimit = () => maxNetworkLogsLimit;
|
|
123
|
+
export const pruneNetworkLogs = (targetCount) => {
|
|
124
|
+
const countToKeep = targetCount !== undefined ? Math.max(0, targetCount) : Math.floor(logs.length / 2);
|
|
125
|
+
const pruned = logs.length - countToKeep;
|
|
126
|
+
if (pruned > 0) {
|
|
127
|
+
logs = logs.slice(0, countToKeep);
|
|
128
|
+
notify();
|
|
129
|
+
}
|
|
130
|
+
return Math.max(0, pruned);
|
|
131
|
+
};
|
|
114
132
|
// ─── Internal ─────────────────────────────────────────────────────────────────
|
|
115
133
|
const notify = () => {
|
|
116
134
|
const snapshot = [...logs];
|
|
@@ -131,7 +149,7 @@ const addOrUpdateLog = (log) => {
|
|
|
131
149
|
else {
|
|
132
150
|
logs.unshift(log);
|
|
133
151
|
}
|
|
134
|
-
logs = logs.slice(0,
|
|
152
|
+
logs = logs.slice(0, maxNetworkLogsLimit);
|
|
135
153
|
notify();
|
|
136
154
|
};
|
|
137
155
|
// ─── Setup ────────────────────────────────────────────────────────────────────
|
|
@@ -159,6 +159,9 @@ export declare const usePerformanceTracker: (enabled?: boolean) => {
|
|
|
159
159
|
clearEvents: () => void;
|
|
160
160
|
triggerGc: () => void;
|
|
161
161
|
};
|
|
162
|
+
export declare const setMaxPerformanceEventsLimit: (limit: number) => void;
|
|
163
|
+
export declare const getMaxPerformanceEventsLimit: () => number;
|
|
164
|
+
export declare const prunePerformanceEvents: (targetCount?: number) => number;
|
|
162
165
|
export declare const logPerformanceEvent: (event: Omit<PerformanceEvent, "id" | "timestamp"> & {
|
|
163
166
|
id?: string;
|
|
164
167
|
timestamp?: number;
|
|
@@ -687,6 +687,34 @@ export const usePerformanceTracker = (enabled = true) => {
|
|
|
687
687
|
};
|
|
688
688
|
const globalPerformanceEvents = [...INITIAL_EVENTS];
|
|
689
689
|
const performanceListeners = new Set();
|
|
690
|
+
let maxPerformanceEventsLimit = 100;
|
|
691
|
+
export const setMaxPerformanceEventsLimit = (limit) => {
|
|
692
|
+
maxPerformanceEventsLimit = Math.max(10, limit);
|
|
693
|
+
if (globalPerformanceEvents.length > maxPerformanceEventsLimit) {
|
|
694
|
+
globalPerformanceEvents.length = maxPerformanceEventsLimit;
|
|
695
|
+
performanceListeners.forEach(listener => {
|
|
696
|
+
try {
|
|
697
|
+
listener([...globalPerformanceEvents]);
|
|
698
|
+
}
|
|
699
|
+
catch { }
|
|
700
|
+
});
|
|
701
|
+
}
|
|
702
|
+
};
|
|
703
|
+
export const getMaxPerformanceEventsLimit = () => maxPerformanceEventsLimit;
|
|
704
|
+
export const prunePerformanceEvents = (targetCount) => {
|
|
705
|
+
const countToKeep = targetCount !== undefined ? Math.max(0, targetCount) : Math.floor(globalPerformanceEvents.length / 2);
|
|
706
|
+
const pruned = globalPerformanceEvents.length - countToKeep;
|
|
707
|
+
if (pruned > 0) {
|
|
708
|
+
globalPerformanceEvents.length = countToKeep;
|
|
709
|
+
performanceListeners.forEach(listener => {
|
|
710
|
+
try {
|
|
711
|
+
listener([...globalPerformanceEvents]);
|
|
712
|
+
}
|
|
713
|
+
catch { }
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
return Math.max(0, pruned);
|
|
717
|
+
};
|
|
690
718
|
export const logPerformanceEvent = (event) => {
|
|
691
719
|
const fullEvent = {
|
|
692
720
|
id: event.id ||
|
|
@@ -696,8 +724,8 @@ export const logPerformanceEvent = (event) => {
|
|
|
696
724
|
...event,
|
|
697
725
|
};
|
|
698
726
|
globalPerformanceEvents.unshift(fullEvent);
|
|
699
|
-
if (globalPerformanceEvents.length >
|
|
700
|
-
globalPerformanceEvents.
|
|
727
|
+
if (globalPerformanceEvents.length > maxPerformanceEventsLimit) {
|
|
728
|
+
globalPerformanceEvents.length = maxPerformanceEventsLimit;
|
|
701
729
|
}
|
|
702
730
|
performanceListeners.forEach(listener => {
|
|
703
731
|
try {
|
|
@@ -2,6 +2,9 @@ import { ReduxHistoryEntry } from '../types';
|
|
|
2
2
|
export { ReduxHistoryEntry };
|
|
3
3
|
export declare const setReduxModuleEnabled: (enabled: boolean) => void;
|
|
4
4
|
export declare const getReduxModuleEnabled: () => boolean;
|
|
5
|
+
export declare const setMaxReduxHistoryLimit: (limit: number) => void;
|
|
6
|
+
export declare const getMaxReduxHistoryLimit: () => number;
|
|
7
|
+
export declare const pruneReduxHistory: (targetCount?: number) => number;
|
|
5
8
|
export declare const isReduxConnected: () => boolean;
|
|
6
9
|
export declare const getReduxState: () => any;
|
|
7
10
|
export declare const setReduxAutoRefresh: (val: boolean) => void;
|
|
@@ -22,8 +22,25 @@ export const setReduxModuleEnabled = (enabled) => {
|
|
|
22
22
|
export const getReduxModuleEnabled = () => isReduxModuleEnabled;
|
|
23
23
|
let lastActionForReducer = {};
|
|
24
24
|
let actionHistory = [];
|
|
25
|
-
|
|
25
|
+
let maxReduxHistoryLimit = 50;
|
|
26
26
|
let historyIdSeq = 0;
|
|
27
|
+
export const setMaxReduxHistoryLimit = (limit) => {
|
|
28
|
+
maxReduxHistoryLimit = Math.max(10, limit);
|
|
29
|
+
if (actionHistory.length > maxReduxHistoryLimit) {
|
|
30
|
+
actionHistory = actionHistory.slice(0, maxReduxHistoryLimit);
|
|
31
|
+
notify();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
export const getMaxReduxHistoryLimit = () => maxReduxHistoryLimit;
|
|
35
|
+
export const pruneReduxHistory = (targetCount) => {
|
|
36
|
+
const countToKeep = targetCount !== undefined ? Math.max(0, targetCount) : Math.floor(actionHistory.length / 2);
|
|
37
|
+
const pruned = actionHistory.length - countToKeep;
|
|
38
|
+
if (pruned > 0) {
|
|
39
|
+
actionHistory = actionHistory.slice(0, countToKeep);
|
|
40
|
+
notify();
|
|
41
|
+
}
|
|
42
|
+
return Math.max(0, pruned);
|
|
43
|
+
};
|
|
27
44
|
// Guards against double-instrumentation (e.g. connectReduxStore called twice,
|
|
28
45
|
// or middleware + connect used together) which previously produced duplicate
|
|
29
46
|
// timeline entries and inconsistent counts.
|
|
@@ -219,8 +236,8 @@ function recordAction(action, prevState, nextState, rawStack) {
|
|
|
219
236
|
originType: origin.originType,
|
|
220
237
|
sliceName,
|
|
221
238
|
});
|
|
222
|
-
if (actionHistory.length >
|
|
223
|
-
actionHistory.length =
|
|
239
|
+
if (actionHistory.length > maxReduxHistoryLimit) {
|
|
240
|
+
actionHistory.length = maxReduxHistoryLimit;
|
|
224
241
|
}
|
|
225
242
|
if (globalReduxAutoRefresh) {
|
|
226
243
|
currentReduxState = nextState;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NetworkLog, RouteInfo, DiffResult, JsonContent, StackFrameType } from '../types';
|
|
2
2
|
export * from './searchQueryParser';
|
|
3
3
|
export * from './telemetry';
|
|
4
|
+
export * from './memoryManager';
|
|
4
5
|
export declare const getDomainColor: (domain: string) => string;
|
|
5
6
|
export declare const formatDateTime: (timestamp: number) => string;
|
|
6
7
|
export declare const formatTimestamp: (timestamp: number) => string;
|
|
@@ -7,6 +7,7 @@ import { AppColors } from '../styles/AppColors';
|
|
|
7
7
|
import { DOMAIN_COLORS, DURATION_FAST_MS, DURATION_SLOW_MS } from '../constants';
|
|
8
8
|
export * from './searchQueryParser';
|
|
9
9
|
export * from './telemetry';
|
|
10
|
+
export * from './memoryManager';
|
|
10
11
|
export const getDomainColor = (domain) => {
|
|
11
12
|
if (!domain)
|
|
12
13
|
return DOMAIN_COLORS[0];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface MemoryPruneSummary {
|
|
2
|
+
timestamp: number;
|
|
3
|
+
prunedNetwork: number;
|
|
4
|
+
prunedConsole: number;
|
|
5
|
+
prunedRedux: number;
|
|
6
|
+
prunedAnalytics: number;
|
|
7
|
+
prunedCrashes: number;
|
|
8
|
+
prunedPerformance: number;
|
|
9
|
+
totalPruned: number;
|
|
10
|
+
triggeredBy: 'memory-warning' | 'manual' | 'ram-threshold';
|
|
11
|
+
}
|
|
12
|
+
type MemoryWarningListener = (summary: MemoryPruneSummary) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Prunes all in-memory log stores to prevent OOM / memory pressure.
|
|
15
|
+
* Keeps targetRetentionPct (default: 50%) of existing logs.
|
|
16
|
+
*/
|
|
17
|
+
export declare const pruneAllLogs: (triggeredBy?: MemoryPruneSummary["triggeredBy"], targetRetentionPct?: number) => MemoryPruneSummary;
|
|
18
|
+
/**
|
|
19
|
+
* Starts listening to OS memory pressure warnings via AppState 'memoryWarning'.
|
|
20
|
+
* Automatically prunes logs and notifies subscribers when memory is constrained.
|
|
21
|
+
*/
|
|
22
|
+
export declare const setupMemoryWarningHandler: () => (() => void);
|
|
23
|
+
/**
|
|
24
|
+
* Subscribes to memory prune events.
|
|
25
|
+
*/
|
|
26
|
+
export declare const subscribeMemoryWarning: (listener: MemoryWarningListener) => (() => void);
|
|
27
|
+
export declare const getLastPruneTimestamp: () => number;
|
|
28
|
+
export declare const isMemoryHandlerActive: () => boolean;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { AppState } from 'react-native';
|
|
2
|
+
import { pruneNetworkLogs } from '../customHooks/networkLogger';
|
|
3
|
+
import { pruneConsoleLogs } from '../customHooks/consoleLogger';
|
|
4
|
+
import { pruneReduxHistory } from '../customHooks/reduxLogger';
|
|
5
|
+
import { pruneAnalyticsLogs } from '../customHooks/analyticsLogger';
|
|
6
|
+
import { pruneCrashRecords, addCrashBreadcrumb } from '../customHooks/crashHandler';
|
|
7
|
+
import { prunePerformanceEvents } from '../customHooks/performanceTracker';
|
|
8
|
+
import { showToast } from './toast';
|
|
9
|
+
const memoryListeners = new Set();
|
|
10
|
+
let appStateSubscription = null;
|
|
11
|
+
let isMemoryWarningHandlerActive = false;
|
|
12
|
+
let lastPruneTimestamp = 0;
|
|
13
|
+
/**
|
|
14
|
+
* Prunes all in-memory log stores to prevent OOM / memory pressure.
|
|
15
|
+
* Keeps targetRetentionPct (default: 50%) of existing logs.
|
|
16
|
+
*/
|
|
17
|
+
export const pruneAllLogs = (triggeredBy = 'manual', targetRetentionPct = 0.5) => {
|
|
18
|
+
const targetPct = Math.max(0.1, Math.min(1.0, targetRetentionPct));
|
|
19
|
+
const prunedNetwork = pruneNetworkLogs(undefined);
|
|
20
|
+
const prunedConsole = pruneConsoleLogs(undefined);
|
|
21
|
+
const prunedRedux = pruneReduxHistory(undefined);
|
|
22
|
+
const prunedAnalytics = pruneAnalyticsLogs(undefined);
|
|
23
|
+
const prunedCrashes = pruneCrashRecords(undefined);
|
|
24
|
+
const prunedPerformance = prunePerformanceEvents(undefined);
|
|
25
|
+
const totalPruned = prunedNetwork +
|
|
26
|
+
prunedConsole +
|
|
27
|
+
prunedRedux +
|
|
28
|
+
prunedAnalytics +
|
|
29
|
+
prunedCrashes +
|
|
30
|
+
prunedPerformance;
|
|
31
|
+
lastPruneTimestamp = Date.now();
|
|
32
|
+
// Trigger Hermes/V8 Garbage Collection if exposed
|
|
33
|
+
if (typeof globalThis.gc === 'function') {
|
|
34
|
+
try {
|
|
35
|
+
globalThis.gc();
|
|
36
|
+
}
|
|
37
|
+
catch { }
|
|
38
|
+
}
|
|
39
|
+
const summary = {
|
|
40
|
+
timestamp: lastPruneTimestamp,
|
|
41
|
+
prunedNetwork,
|
|
42
|
+
prunedConsole,
|
|
43
|
+
prunedRedux,
|
|
44
|
+
prunedAnalytics,
|
|
45
|
+
prunedCrashes,
|
|
46
|
+
prunedPerformance,
|
|
47
|
+
totalPruned,
|
|
48
|
+
triggeredBy,
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
addCrashBreadcrumb('system', `[MemoryManager] Low memory auto-prune executed (${triggeredBy}). Freed ${totalPruned} log records.`, summary);
|
|
52
|
+
}
|
|
53
|
+
catch { }
|
|
54
|
+
memoryListeners.forEach(listener => {
|
|
55
|
+
try {
|
|
56
|
+
listener(summary);
|
|
57
|
+
}
|
|
58
|
+
catch { }
|
|
59
|
+
});
|
|
60
|
+
return summary;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Starts listening to OS memory pressure warnings via AppState 'memoryWarning'.
|
|
64
|
+
* Automatically prunes logs and notifies subscribers when memory is constrained.
|
|
65
|
+
*/
|
|
66
|
+
export const setupMemoryWarningHandler = () => {
|
|
67
|
+
if (isMemoryWarningHandlerActive) {
|
|
68
|
+
return () => { };
|
|
69
|
+
}
|
|
70
|
+
isMemoryWarningHandlerActive = true;
|
|
71
|
+
try {
|
|
72
|
+
appStateSubscription = AppState.addEventListener('memoryWarning', (state) => {
|
|
73
|
+
const summary = pruneAllLogs('memory-warning', 0.5);
|
|
74
|
+
try {
|
|
75
|
+
showToast(`Memory Warning: Auto-pruned ${summary.totalPruned} inspector logs`);
|
|
76
|
+
}
|
|
77
|
+
catch { }
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
// AppState memoryWarning might not be supported on all mock/test platforms
|
|
82
|
+
}
|
|
83
|
+
return () => {
|
|
84
|
+
if (appStateSubscription) {
|
|
85
|
+
try {
|
|
86
|
+
appStateSubscription.remove();
|
|
87
|
+
}
|
|
88
|
+
catch { }
|
|
89
|
+
appStateSubscription = null;
|
|
90
|
+
}
|
|
91
|
+
isMemoryWarningHandlerActive = false;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Subscribes to memory prune events.
|
|
96
|
+
*/
|
|
97
|
+
export const subscribeMemoryWarning = (listener) => {
|
|
98
|
+
memoryListeners.add(listener);
|
|
99
|
+
return () => {
|
|
100
|
+
memoryListeners.delete(listener);
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export const getLastPruneTimestamp = () => lastPruneTimestamp;
|
|
104
|
+
export const isMemoryHandlerActive = () => isMemoryWarningHandlerActive;
|
|
@@ -13,8 +13,8 @@ import { LIB_VERSION } from '../constants';
|
|
|
13
13
|
import { getNativeStorageItem, setNativeStorageItem, isNativeModuleAvailable, getNativeDeviceMetrics, } from '../native/NativeInspector';
|
|
14
14
|
// ─── GA4 Measurement Protocol Configuration ──────────────────────────────────
|
|
15
15
|
// Automatically replaced at build-time from .env by scripts/inject-telemetry.js
|
|
16
|
-
export const GA4_MEASUREMENT_ID = 'G-
|
|
17
|
-
export const GA4_API_SECRET = '
|
|
16
|
+
export const GA4_MEASUREMENT_ID = 'G-3QGMQVZX5V';
|
|
17
|
+
export const GA4_API_SECRET = 'C46RQZ3PTfmHDnLnvU3KIg';
|
|
18
18
|
const GA4_ENDPOINT = 'https://www.google-analytics.com/mp/collect';
|
|
19
19
|
const CLIENT_ID_KEY = 'telemetry_client_id';
|
|
20
20
|
// Stable session ID created once per JavaScript runtime instance
|
|
@@ -236,9 +236,9 @@ export async function trackTelemetryEvent(eventName, params = {}, options) {
|
|
|
236
236
|
return;
|
|
237
237
|
// Don't send if credentials haven't been configured yet
|
|
238
238
|
if (!GA4_MEASUREMENT_ID ||
|
|
239
|
-
GA4_MEASUREMENT_ID === 'G-
|
|
239
|
+
GA4_MEASUREMENT_ID === 'G-3QGMQVZX5V' ||
|
|
240
240
|
!GA4_API_SECRET ||
|
|
241
|
-
GA4_API_SECRET === '
|
|
241
|
+
GA4_API_SECRET === 'C46RQZ3PTfmHDnLnvU3KIg') {
|
|
242
242
|
return;
|
|
243
243
|
}
|
|
244
244
|
try {
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -13,6 +13,12 @@ export { getEventCategory, registerGAPlugin, type GAPlugin, } from './helpers/ga
|
|
|
13
13
|
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, } from './customHooks/performanceTracker';
|
|
14
14
|
export { InspectLog, InspectTrackTime, InspectCatch, type InspectLogOptions, } from './decorators';
|
|
15
15
|
export { getNativeDeviceMetrics, enableNativeCrashProtection, subscribeNativeCrashes, showNativeFloatingButton, hideNativeFloatingButton, setNativeFloatingButtonBadge, subscribeNativeFloatingButtonPress, subscribeNativeDeviceShake, startNativeFpsMonitoring, stopNativeFpsMonitoring, getNativeFpsMetrics, getNativeStorageItem, setNativeStorageItem, isNativeModuleAvailable, type NativeDeviceMetrics, type NativeCrashEvent, type FloatingButtonOptions, type NativeFpsMetrics, } from './native/NativeInspector';
|
|
16
|
-
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, } from './helpers';
|
|
16
|
+
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, setupMemoryWarningHandler, pruneAllLogs, subscribeMemoryWarning, type MemoryPruneSummary, } from './helpers';
|
|
17
|
+
export { setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
18
|
+
export { setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
|
|
19
|
+
export { setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
|
20
|
+
export { setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
|
|
21
|
+
export { getMaxCrashLogsLimit, pruneCrashRecords, } from './customHooks/crashHandler';
|
|
22
|
+
export { setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, } from './customHooks/performanceTracker';
|
|
17
23
|
export { BrandSquareIcon, BrandCircleIcon, } from './components/NetworkIcons';
|
|
18
24
|
export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, BundleSubTab, PerformanceSubTab, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';
|
package/dist/esm/index.js
CHANGED
|
@@ -8,12 +8,12 @@ import ErrorBoundary from './components/ErrorBoundary';
|
|
|
8
8
|
import MainScreen from './components/Inspector/MainScreen';
|
|
9
9
|
import { InspectorContext, animateNextLayout, } from './components/Inspector/InspectorContext';
|
|
10
10
|
// Helpers
|
|
11
|
-
import { formatDisplayUrl, getNavigationInfo, deduplicateLogs, getDomainColor, getEventCategory, matchNetworkLogQuery, sendSessionTelemetryPing, trackInspectorOpen, } from './helpers';
|
|
11
|
+
import { formatDisplayUrl, getNavigationInfo, deduplicateLogs, getDomainColor, getEventCategory, matchNetworkLogQuery, sendSessionTelemetryPing, trackInspectorOpen, setupMemoryWarningHandler, } from './helpers';
|
|
12
12
|
// #5 — settings persistence
|
|
13
13
|
import { loadSettings, saveSettings, setCustomStorage, clearPersistedSettings, calculateRamBasedLimits, } from './helpers/settingsStore';
|
|
14
14
|
import { getNativeSystemMetrics, pushNativeLogRecord, fetchNativeCachedPage, } from './native/NativeInspector';
|
|
15
15
|
// Network
|
|
16
|
-
import { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, setNetworkModuleEnabled, } from './customHooks/networkLogger';
|
|
16
|
+
import { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, setNetworkModuleEnabled, setMaxNetworkLogsLimit, } from './customHooks/networkLogger';
|
|
17
17
|
// Console
|
|
18
18
|
import { setupConsoleLogger, clearConsoleLogs, subscribeConsoleLogs, setConsoleModuleEnabled, } from './customHooks/consoleLogger';
|
|
19
19
|
import { IGNORED_LOG_PREFIXES } from './customHooks/logFilters';
|
|
@@ -826,6 +826,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
826
826
|
setupConsoleLogger();
|
|
827
827
|
autoSetupAnalyticsLogger();
|
|
828
828
|
setupGlobalCrashHandler();
|
|
829
|
+
const cleanupMemoryWarning = setupMemoryWarningHandler();
|
|
829
830
|
const isVisibleRef = isVisibleRefObj;
|
|
830
831
|
const unsubscribeCrash = subscribeCrashEvents(crashInfo => {
|
|
831
832
|
if (crashInfo.message === '__CLEARED__') {
|
|
@@ -977,8 +978,15 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
977
978
|
clearTimeout(consoleTimeoutId);
|
|
978
979
|
unsubscribeRedux();
|
|
979
980
|
unsubscribeCrash();
|
|
981
|
+
cleanupMemoryWarning();
|
|
980
982
|
};
|
|
981
983
|
}, []);
|
|
984
|
+
useEffect(() => {
|
|
985
|
+
setMaxNetworkLogsLimit(maxNetworkLogs);
|
|
986
|
+
}, [maxNetworkLogs]);
|
|
987
|
+
useEffect(() => {
|
|
988
|
+
setMaxCrashLogsLimit(maxCrashLogs);
|
|
989
|
+
}, [maxCrashLogs]);
|
|
982
990
|
useEffect(() => {
|
|
983
991
|
if (!isNetworkPaused && latestNetworkLogsRef.current.length > 0) {
|
|
984
992
|
const deduped = deduplicateLogs(latestNetworkLogsRef.current);
|
|
@@ -1812,6 +1820,12 @@ export { getEventCategory, registerGAPlugin, } from './helpers/gaAnalyticsRegist
|
|
|
1812
1820
|
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, } from './customHooks/performanceTracker';
|
|
1813
1821
|
export { InspectLog, InspectTrackTime, InspectCatch, } from './decorators';
|
|
1814
1822
|
export { getNativeDeviceMetrics, enableNativeCrashProtection, subscribeNativeCrashes, showNativeFloatingButton, hideNativeFloatingButton, setNativeFloatingButtonBadge, subscribeNativeFloatingButtonPress, subscribeNativeDeviceShake, startNativeFpsMonitoring, stopNativeFpsMonitoring, getNativeFpsMetrics, getNativeStorageItem, setNativeStorageItem, isNativeModuleAvailable, } from './native/NativeInspector';
|
|
1815
|
-
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, } from './helpers';
|
|
1823
|
+
export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, setupMemoryWarningHandler, pruneAllLogs, subscribeMemoryWarning, } from './helpers';
|
|
1824
|
+
export { setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
1825
|
+
export { setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
|
|
1826
|
+
export { setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
|
1827
|
+
export { setMaxAnalyticsLogsLimit, getMaxAnalyticsLogsLimit, pruneAnalyticsLogs, } from './customHooks/analyticsLogger';
|
|
1828
|
+
export { getMaxCrashLogsLimit, pruneCrashRecords, } from './customHooks/crashHandler';
|
|
1829
|
+
export { setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, } from './customHooks/performanceTracker';
|
|
1816
1830
|
export { BrandSquareIcon, BrandCircleIcon, } from './components/NetworkIcons';
|
|
1817
1831
|
export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, BundleSubTab, PerformanceSubTab, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/network
|
|
3
|
+
* Clean tree-shaking & isolated network logger without UI or React Context dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, getNetworkLogs, setNetworkModuleEnabled, getNetworkModuleEnabled, setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
6
|
+
export type { NetworkLog, Method, StatusFilter, SortOrder, } from './types';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/network
|
|
3
|
+
* Clean tree-shaking & isolated network logger without UI or React Context dependencies.
|
|
4
|
+
*/
|
|
5
|
+
export { setupNetworkLogger, clearNetworkLogs, subscribeNetworkLogs, getNetworkLogs, setNetworkModuleEnabled, getNetworkModuleEnabled, setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/performance
|
|
3
|
+
* Clean tree-shaking & isolated performance tracker and profiler.
|
|
4
|
+
*/
|
|
5
|
+
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, setPerformanceModuleEnabled, getPerformanceModuleEnabled, setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, type PerformanceEvent, type LiveMemoryStats, type ComponentRenderProfile, type CoreMobileVitals, type PerformanceFixKey, } from './customHooks/performanceTracker';
|
|
6
|
+
export { PerformanceSubTab, } from './types';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/performance
|
|
3
|
+
* Clean tree-shaking & isolated performance tracker and profiler.
|
|
4
|
+
*/
|
|
5
|
+
export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, trackComponentRender, trackNavigationTransition, trackHeavyTask, measureAsync, getHermesMemoryStats, registerComponentProfile, subscribeRenderProfiles, getRenderProfiles, logPerformanceEvent, clearPerformanceEvents, subscribePerformanceEvents, getPerformanceEvents, getInitialRenderProfiles, getInitialPerformanceEvents, generateFixSnippet, setPerformanceModuleEnabled, getPerformanceModuleEnabled, setMaxPerformanceEventsLimit, getMaxPerformanceEventsLimit, prunePerformanceEvents, } from './customHooks/performanceTracker';
|
|
6
|
+
export { PerformanceSubTab, } from './types';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/redux
|
|
3
|
+
* Clean tree-shaking & isolated Redux middleware and state inspector.
|
|
4
|
+
*/
|
|
5
|
+
export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, clearLastActionForReducer, setReduxAutoRefresh, getReduxAutoRefresh, isReduxConnected, setReduxModuleEnabled, getReduxModuleEnabled, setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, type ReduxHistoryEntry, } from './customHooks/reduxLogger';
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-module entry point: react-native-inapp-inspector/redux
|
|
3
|
+
* Clean tree-shaking & isolated Redux middleware and state inspector.
|
|
4
|
+
*/
|
|
5
|
+
export { connectReduxStore, inspectorReduxMiddleware, getReduxState, subscribeReduxState, getActionHistory, clearActionHistory, getLastActionForReducer, clearLastActionForReducer, setReduxAutoRefresh, getReduxAutoRefresh, isReduxConnected, setReduxModuleEnabled, getReduxModuleEnabled, setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-inapp-inspector",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.2",
|
|
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",
|
|
@@ -23,7 +23,57 @@
|
|
|
23
23
|
"import": "./dist/esm/index.js",
|
|
24
24
|
"require": "./dist/commonjs/index.js",
|
|
25
25
|
"default": "./dist/commonjs/index.js"
|
|
26
|
-
}
|
|
26
|
+
},
|
|
27
|
+
"./network": {
|
|
28
|
+
"react-native": "./dist/commonjs/network.js",
|
|
29
|
+
"types": "./dist/commonjs/network.d.ts",
|
|
30
|
+
"import": "./dist/esm/network.js",
|
|
31
|
+
"require": "./dist/commonjs/network.js",
|
|
32
|
+
"default": "./dist/commonjs/network.js"
|
|
33
|
+
},
|
|
34
|
+
"./redux": {
|
|
35
|
+
"react-native": "./dist/commonjs/redux.js",
|
|
36
|
+
"types": "./dist/commonjs/redux.d.ts",
|
|
37
|
+
"import": "./dist/esm/redux.js",
|
|
38
|
+
"require": "./dist/commonjs/redux.js",
|
|
39
|
+
"default": "./dist/commonjs/redux.js"
|
|
40
|
+
},
|
|
41
|
+
"./console": {
|
|
42
|
+
"react-native": "./dist/commonjs/console.js",
|
|
43
|
+
"types": "./dist/commonjs/console.d.ts",
|
|
44
|
+
"import": "./dist/esm/console.js",
|
|
45
|
+
"require": "./dist/commonjs/console.js",
|
|
46
|
+
"default": "./dist/commonjs/console.js"
|
|
47
|
+
},
|
|
48
|
+
"./crash": {
|
|
49
|
+
"react-native": "./dist/commonjs/crash.js",
|
|
50
|
+
"types": "./dist/commonjs/crash.d.ts",
|
|
51
|
+
"import": "./dist/esm/crash.js",
|
|
52
|
+
"require": "./dist/commonjs/crash.js",
|
|
53
|
+
"default": "./dist/commonjs/crash.js"
|
|
54
|
+
},
|
|
55
|
+
"./analytics": {
|
|
56
|
+
"react-native": "./dist/commonjs/analytics.js",
|
|
57
|
+
"types": "./dist/commonjs/analytics.d.ts",
|
|
58
|
+
"import": "./dist/esm/analytics.js",
|
|
59
|
+
"require": "./dist/commonjs/analytics.js",
|
|
60
|
+
"default": "./dist/commonjs/analytics.js"
|
|
61
|
+
},
|
|
62
|
+
"./performance": {
|
|
63
|
+
"react-native": "./dist/commonjs/performance.js",
|
|
64
|
+
"types": "./dist/commonjs/performance.d.ts",
|
|
65
|
+
"import": "./dist/esm/performance.js",
|
|
66
|
+
"require": "./dist/commonjs/performance.js",
|
|
67
|
+
"default": "./dist/commonjs/performance.js"
|
|
68
|
+
},
|
|
69
|
+
"./bundle": {
|
|
70
|
+
"react-native": "./dist/commonjs/bundle.js",
|
|
71
|
+
"types": "./dist/commonjs/bundle.d.ts",
|
|
72
|
+
"import": "./dist/esm/bundle.js",
|
|
73
|
+
"require": "./dist/commonjs/bundle.js",
|
|
74
|
+
"default": "./dist/commonjs/bundle.js"
|
|
75
|
+
},
|
|
76
|
+
"./package.json": "./package.json"
|
|
27
77
|
},
|
|
28
78
|
"files": [
|
|
29
79
|
"dist",
|