react-native-inapp-inspector 2.2.5 → 2.2.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/README.md +0 -10
- package/dist/commonjs/components/Inspector/InspectorHeader.js +0 -73
- package/dist/commonjs/components/Inspector/MainScreen.js +0 -4
- package/dist/commonjs/components/Inspector/SettingsPanel.js +2 -107
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/helpers/index.d.ts +0 -1
- package/dist/commonjs/helpers/index.js +0 -1
- package/dist/commonjs/index.d.ts +1 -1
- package/dist/commonjs/index.js +2 -19
- package/dist/esm/components/Inspector/InspectorHeader.js +0 -73
- package/dist/esm/components/Inspector/MainScreen.js +0 -4
- package/dist/esm/components/Inspector/SettingsPanel.js +2 -107
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/helpers/index.d.ts +0 -1
- package/dist/esm/helpers/index.js +0 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +2 -12
- package/package.json +2 -2
- package/src/components/Inspector/InspectorHeader.tsx +0 -93
- package/src/components/Inspector/MainScreen.tsx +0 -4
- package/src/components/Inspector/SettingsPanel.tsx +2 -128
- package/src/constants/version.ts +1 -1
- package/src/helpers/index.ts +0 -1
- package/src/index.tsx +2 -24
- package/dist/commonjs/components/Inspector/TelemetryConsentModal.d.ts +0 -3
- package/dist/commonjs/components/Inspector/TelemetryConsentModal.js +0 -353
- package/dist/commonjs/helpers/telemetry.d.ts +0 -99
- package/dist/commonjs/helpers/telemetry.js +0 -398
- package/dist/esm/components/Inspector/TelemetryConsentModal.d.ts +0 -3
- package/dist/esm/components/Inspector/TelemetryConsentModal.js +0 -316
- package/dist/esm/helpers/telemetry.d.ts +0 -99
- package/dist/esm/helpers/telemetry.js +0 -380
- package/src/components/Inspector/TelemetryConsentModal.tsx +0 -357
- package/src/helpers/telemetry.ts +0 -505
package/README.md
CHANGED
|
@@ -371,16 +371,6 @@ npm run android
|
|
|
371
371
|
|
|
372
372
|
---
|
|
373
373
|
|
|
374
|
-
## 🔒 Anonymous Telemetry
|
|
375
|
-
|
|
376
|
-
`react-native-inapp-inspector` collects anonymous diagnostic usage telemetry (such as React Native framework version, OS platform, and feature interactions) to help maintainers prioritize features and track stability across architectures (e.g. Hermes vs. JSC, New Architecture vs. Paper).
|
|
377
|
-
|
|
378
|
-
- **Zero PII**: No personal data, user identities, authentication tokens, device names, or network request payloads are ever collected.
|
|
379
|
-
- **Fail-Safe & Non-Blocking**: Runs completely in the background without affecting app performance.
|
|
380
|
-
- **User Consent Dialog**: On initial launch, an in-app consent dialog prompts the developer to allow or decline anonymous telemetry.
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
374
|
## 🤝 Contributing
|
|
385
375
|
|
|
386
376
|
Contributions are welcome! Please check out our [Contributing Guidelines](CONTRIBUTING.md) to get started.
|
|
@@ -48,37 +48,11 @@ const AppFonts_1 = require("../../styles/AppFonts");
|
|
|
48
48
|
const constants_1 = require("../../constants");
|
|
49
49
|
const constants_2 = require("../../constants");
|
|
50
50
|
const helpers_1 = require("../../helpers");
|
|
51
|
-
const telemetry_1 = require("../../helpers/telemetry");
|
|
52
51
|
const UpdateAvailableModal_1 = require("./UpdateAvailableModal");
|
|
53
52
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
54
53
|
const InspectorHeader = react_1.default.memo(() => {
|
|
55
54
|
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = (0, InspectorContext_1.useInspector)();
|
|
56
55
|
const [showUpdateModal, setShowUpdateModal] = react_1.default.useState(false);
|
|
57
|
-
const [isTelemetryActive, setIsTelemetryActive] = react_1.default.useState(false);
|
|
58
|
-
const telemetryPulseAnim = react_1.default.useRef(new react_native_1.Animated.Value(1)).current;
|
|
59
|
-
react_1.default.useEffect(() => {
|
|
60
|
-
(0, telemetry_1.getTelemetryConsentStatus)().then(status => {
|
|
61
|
-
setIsTelemetryActive(status === 'granted');
|
|
62
|
-
});
|
|
63
|
-
}, [visible]);
|
|
64
|
-
react_1.default.useEffect(() => {
|
|
65
|
-
if (!isTelemetryActive)
|
|
66
|
-
return;
|
|
67
|
-
const pulse = react_native_1.Animated.loop(react_native_1.Animated.sequence([
|
|
68
|
-
react_native_1.Animated.timing(telemetryPulseAnim, {
|
|
69
|
-
toValue: 2.2,
|
|
70
|
-
duration: 1500,
|
|
71
|
-
useNativeDriver: true,
|
|
72
|
-
}),
|
|
73
|
-
react_native_1.Animated.timing(telemetryPulseAnim, {
|
|
74
|
-
toValue: 1,
|
|
75
|
-
duration: 0,
|
|
76
|
-
useNativeDriver: true,
|
|
77
|
-
}),
|
|
78
|
-
]));
|
|
79
|
-
pulse.start();
|
|
80
|
-
return () => pulse.stop();
|
|
81
|
-
}, [isTelemetryActive, telemetryPulseAnim]);
|
|
82
56
|
const envConfig = (0, react_1.useMemo)(() => {
|
|
83
57
|
const rawEnv = (environment || (__DEV__ ? 'DEV' : 'PROD')).trim();
|
|
84
58
|
const clean = rawEnv.toUpperCase();
|
|
@@ -371,53 +345,6 @@ const InspectorHeader = react_1.default.memo(() => {
|
|
|
371
345
|
●
|
|
372
346
|
</react_native_1.Text>)}
|
|
373
347
|
</react_native_1.Pressable>
|
|
374
|
-
|
|
375
|
-
{isTelemetryActive && (<react_native_1.Pressable onPress={() => react_native_1.Alert.alert('Anonymous Telemetry Active', 'Anonymous diagnostics (such as React Native version, JavaScript engine, and device model) are currently enabled to help improve library tooling.\n\nNo user data or network payloads are captured. You can toggle this anytime in Settings.', [{ text: 'Got it' }])} style={{
|
|
376
|
-
flexDirection: 'row',
|
|
377
|
-
alignItems: 'center',
|
|
378
|
-
backgroundColor: 'rgba(16, 185, 129, 0.22)',
|
|
379
|
-
borderRadius: 5,
|
|
380
|
-
paddingHorizontal: 5.5,
|
|
381
|
-
paddingVertical: 2,
|
|
382
|
-
gap: 4.5,
|
|
383
|
-
borderWidth: 1,
|
|
384
|
-
borderColor: 'rgba(52, 211, 153, 0.45)',
|
|
385
|
-
flexShrink: 0,
|
|
386
|
-
}}>
|
|
387
|
-
<react_native_1.View style={{
|
|
388
|
-
width: 6,
|
|
389
|
-
height: 6,
|
|
390
|
-
alignItems: 'center',
|
|
391
|
-
justifyContent: 'center',
|
|
392
|
-
}}>
|
|
393
|
-
<react_native_1.Animated.View style={{
|
|
394
|
-
position: 'absolute',
|
|
395
|
-
width: 6,
|
|
396
|
-
height: 6,
|
|
397
|
-
borderRadius: 3,
|
|
398
|
-
backgroundColor: '#34D399',
|
|
399
|
-
opacity: telemetryPulseAnim.interpolate({
|
|
400
|
-
inputRange: [1, 2.2],
|
|
401
|
-
outputRange: [0.8, 0],
|
|
402
|
-
}),
|
|
403
|
-
transform: [{ scale: telemetryPulseAnim }],
|
|
404
|
-
}}/>
|
|
405
|
-
<react_native_1.View style={{
|
|
406
|
-
width: 4,
|
|
407
|
-
height: 4,
|
|
408
|
-
borderRadius: 2,
|
|
409
|
-
backgroundColor: '#10B981',
|
|
410
|
-
}}/>
|
|
411
|
-
</react_native_1.View>
|
|
412
|
-
<react_native_1.Text style={{
|
|
413
|
-
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
414
|
-
fontSize: 9,
|
|
415
|
-
color: '#6EE7B7',
|
|
416
|
-
letterSpacing: 0.2,
|
|
417
|
-
}}>
|
|
418
|
-
LIVE
|
|
419
|
-
</react_native_1.Text>
|
|
420
|
-
</react_native_1.Pressable>)}
|
|
421
348
|
</react_native_1.View>
|
|
422
349
|
</react_native_1.View>
|
|
423
350
|
</react_native_1.View>) : null}
|
|
@@ -58,7 +58,6 @@ const CrashDetail_1 = __importDefault(require("./CrashDetail"));
|
|
|
58
58
|
const DeviceInfoTab_1 = __importDefault(require("./DeviceInfoTab"));
|
|
59
59
|
const StorageTab_1 = __importDefault(require("./StorageTab"));
|
|
60
60
|
const SettingsPanel_1 = __importDefault(require("./SettingsPanel"));
|
|
61
|
-
const TelemetryConsentModal_1 = __importDefault(require("./TelemetryConsentModal"));
|
|
62
61
|
const NpmUpdateToast_1 = __importDefault(require("./NpmUpdateToast"));
|
|
63
62
|
const Toast_1 = __importDefault(require("../Toast"));
|
|
64
63
|
const styles_1 = __importDefault(require("../../styles"));
|
|
@@ -214,9 +213,6 @@ const MainScreen = () => {
|
|
|
214
213
|
|
|
215
214
|
{/* NPM Version Update Toast with timeout progress bar */}
|
|
216
215
|
<NpmUpdateToast_1.default />
|
|
217
|
-
|
|
218
|
-
{/* Anonymous Telemetry Consent Dialog shown ONLY when inspector is active */}
|
|
219
|
-
<TelemetryConsentModal_1.default />
|
|
220
216
|
</react_native_1.View>
|
|
221
217
|
</react_native_1.View>
|
|
222
218
|
</ErrorBoundary_1.default>)}
|
|
@@ -55,7 +55,6 @@ const performanceTracker_1 = require("../../customHooks/performanceTracker");
|
|
|
55
55
|
const reduxLogger_1 = require("../../customHooks/reduxLogger");
|
|
56
56
|
const analyticsLogger_2 = require("../../customHooks/analyticsLogger");
|
|
57
57
|
const i18n_1 = require("../../i18n");
|
|
58
|
-
const telemetry_1 = require("../../helpers/telemetry");
|
|
59
58
|
const NetworkIcons_1 = require("../NetworkIcons");
|
|
60
59
|
const constants_1 = require("../../constants");
|
|
61
60
|
const helpers_1 = require("../../helpers");
|
|
@@ -65,20 +64,6 @@ const SettingsPanel = () => {
|
|
|
65
64
|
const { t } = (0, i18n_1.useTranslation)();
|
|
66
65
|
const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, showUpdateToast, setShowUpdateToast, showConsoleLevels, setShowConsoleLevels, resetToDefaults, storage, logs, consoleLogs, analyticsEvents, reduxState, maxNetworkLogs, setMaxNetworkLogs, maxConsoleLogs, setMaxConsoleLogs, maxAnalyticsEventsLimit, setMaxAnalyticsEventsLimit, isAutoRamLimitEnabled, setIsAutoRamLimitEnabled, deviceFreeRamMb, reduxAutoRefresh, setReduxAutoRefreshState, reduxExpandDepth, setReduxExpandDepth, switchActiveTab, setSelected, setSelectedEvent, setReduxState, crashRecords, maxCrashLogs, setMaxCrashLogs, updateAvailable, latestNpmVersion, } = (0, InspectorContext_1.useInspector)();
|
|
67
66
|
const [stagedHeight, setStagedHeight] = (0, react_1.useState)(modalHeightPercent);
|
|
68
|
-
const [telemetryConsent, setTelemetryConsentState] = (0, react_1.useState)(true);
|
|
69
|
-
(0, react_1.useEffect)(() => {
|
|
70
|
-
(0, telemetry_1.getTelemetryConsentStatus)().then(status => {
|
|
71
|
-
setTelemetryConsentState(status === 'granted');
|
|
72
|
-
});
|
|
73
|
-
}, []);
|
|
74
|
-
const handleToggleTelemetry = async () => {
|
|
75
|
-
const nextVal = !telemetryConsent;
|
|
76
|
-
setTelemetryConsentState(nextVal);
|
|
77
|
-
await (0, telemetry_1.setTelemetryConsent)(nextVal);
|
|
78
|
-
if (nextVal) {
|
|
79
|
-
(0, telemetry_1.sendSessionTelemetryPing)({ force: true });
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
67
|
(0, react_1.useEffect)(() => {
|
|
83
68
|
setStagedHeight(modalHeightPercent);
|
|
84
69
|
}, [modalHeightPercent]);
|
|
@@ -1235,97 +1220,7 @@ const SettingsPanel = () => {
|
|
|
1235
1220
|
</react_native_1.View>
|
|
1236
1221
|
</react_native_1.View>
|
|
1237
1222
|
|
|
1238
|
-
{/* Section 4:
|
|
1239
|
-
<react_native_1.View style={{
|
|
1240
|
-
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1241
|
-
borderRadius: 14,
|
|
1242
|
-
borderWidth: 1,
|
|
1243
|
-
borderColor: AppColors_1.AppColors.grayBorderSecondary,
|
|
1244
|
-
overflow: 'hidden',
|
|
1245
|
-
padding: 14,
|
|
1246
|
-
gap: 12,
|
|
1247
|
-
}}>
|
|
1248
|
-
<react_native_1.Text style={{
|
|
1249
|
-
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1250
|
-
fontSize: 11,
|
|
1251
|
-
lineHeight: 14,
|
|
1252
|
-
color: AppColors_1.AppColors.grayTextWeak,
|
|
1253
|
-
letterSpacing: 0.8,
|
|
1254
|
-
}}>
|
|
1255
|
-
PRIVACY & ANONYMOUS DIAGNOSTICS
|
|
1256
|
-
</react_native_1.Text>
|
|
1257
|
-
|
|
1258
|
-
<react_native_1.View style={{
|
|
1259
|
-
flexDirection: 'row',
|
|
1260
|
-
alignItems: 'center',
|
|
1261
|
-
justifyContent: 'space-between',
|
|
1262
|
-
}}>
|
|
1263
|
-
<react_native_1.View style={{
|
|
1264
|
-
flexDirection: 'row',
|
|
1265
|
-
alignItems: 'center',
|
|
1266
|
-
gap: 10,
|
|
1267
|
-
flex: 1,
|
|
1268
|
-
marginRight: 10,
|
|
1269
|
-
}}>
|
|
1270
|
-
<react_native_1.View style={{
|
|
1271
|
-
width: 32,
|
|
1272
|
-
height: 32,
|
|
1273
|
-
borderRadius: 8,
|
|
1274
|
-
backgroundColor: AppColors_1.AppColors.purpleShade50,
|
|
1275
|
-
alignItems: 'center',
|
|
1276
|
-
justifyContent: 'center',
|
|
1277
|
-
}}>
|
|
1278
|
-
<NetworkIcons_1.ShieldAlertIcon color={AppColors_1.AppColors.purple} size={15}/>
|
|
1279
|
-
</react_native_1.View>
|
|
1280
|
-
<react_native_1.View style={{ flex: 1 }}>
|
|
1281
|
-
<react_native_1.Text style={{
|
|
1282
|
-
fontFamily: AppFonts_1.AppFonts.interBold,
|
|
1283
|
-
fontSize: 13.5,
|
|
1284
|
-
lineHeight: 18,
|
|
1285
|
-
color: AppColors_1.AppColors.primaryBlack,
|
|
1286
|
-
}}>
|
|
1287
|
-
Help Improve In-App Inspector
|
|
1288
|
-
</react_native_1.Text>
|
|
1289
|
-
<react_native_1.Text style={{
|
|
1290
|
-
fontFamily: AppFonts_1.AppFonts.interRegular,
|
|
1291
|
-
fontSize: 11,
|
|
1292
|
-
lineHeight: 15,
|
|
1293
|
-
color: AppColors_1.AppColors.grayText,
|
|
1294
|
-
marginTop: 1,
|
|
1295
|
-
}}>
|
|
1296
|
-
Share non-identifiable technical metrics (RN version, JS
|
|
1297
|
-
engine, device model). No user data or network payloads
|
|
1298
|
-
are captured.
|
|
1299
|
-
</react_native_1.Text>
|
|
1300
|
-
</react_native_1.View>
|
|
1301
|
-
</react_native_1.View>
|
|
1302
|
-
|
|
1303
|
-
<TouchableScale_1.default accessible={true} accessibilityRole="switch" accessibilityLabel="Toggle Anonymous Telemetry" accessibilityState={{ checked: telemetryConsent }} onPress={handleToggleTelemetry} style={{
|
|
1304
|
-
width: 42,
|
|
1305
|
-
height: 24,
|
|
1306
|
-
borderRadius: 12,
|
|
1307
|
-
backgroundColor: telemetryConsent
|
|
1308
|
-
? AppColors_1.AppColors.purple
|
|
1309
|
-
: AppColors_1.AppColors.grayBorderSecondary,
|
|
1310
|
-
padding: 2,
|
|
1311
|
-
justifyContent: 'center',
|
|
1312
|
-
alignItems: telemetryConsent ? 'flex-end' : 'flex-start',
|
|
1313
|
-
}}>
|
|
1314
|
-
<react_native_1.View style={{
|
|
1315
|
-
width: 20,
|
|
1316
|
-
height: 20,
|
|
1317
|
-
borderRadius: 10,
|
|
1318
|
-
backgroundColor: AppColors_1.AppColors.white,
|
|
1319
|
-
shadowColor: AppColors_1.AppColors.black,
|
|
1320
|
-
shadowOpacity: 0.18,
|
|
1321
|
-
shadowRadius: 2,
|
|
1322
|
-
shadowOffset: { width: 0, height: 1 },
|
|
1323
|
-
}}/>
|
|
1324
|
-
</TouchableScale_1.default>
|
|
1325
|
-
</react_native_1.View>
|
|
1326
|
-
</react_native_1.View>
|
|
1327
|
-
|
|
1328
|
-
{/* Section 5: Notifications & Toasts */}
|
|
1223
|
+
{/* Section 4: Notifications & Toasts */}
|
|
1329
1224
|
<react_native_1.View style={{
|
|
1330
1225
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1331
1226
|
borderRadius: 14,
|
|
@@ -1414,7 +1309,7 @@ const SettingsPanel = () => {
|
|
|
1414
1309
|
</react_native_1.View>
|
|
1415
1310
|
</react_native_1.View>
|
|
1416
1311
|
|
|
1417
|
-
{/* Section
|
|
1312
|
+
{/* Section 5: NPM Package & Updates */}
|
|
1418
1313
|
<react_native_1.View style={{
|
|
1419
1314
|
backgroundColor: AppColors_1.AppColors.primaryLight,
|
|
1420
1315
|
borderRadius: 14,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "2.2.
|
|
1
|
+
export declare const LIB_VERSION = "2.2.6";
|
|
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LIB_VERSION = void 0;
|
|
4
4
|
// AUTO-GENERATED FILE — do not edit by hand.
|
|
5
5
|
// Regenerated from package.json on every build by scripts/gen-version.js.
|
|
6
|
-
exports.LIB_VERSION = '2.2.
|
|
6
|
+
exports.LIB_VERSION = '2.2.6';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { NetworkLog, RouteInfo, DiffResult, JsonContent, StackFrameType } from '../types';
|
|
2
2
|
export * from './searchQueryParser';
|
|
3
|
-
export * from './telemetry';
|
|
4
3
|
export * from './memoryManager';
|
|
5
4
|
export declare const getDomainColor: (domain: string) => string;
|
|
6
5
|
export declare const formatDateTime: (timestamp: number) => string;
|
|
@@ -26,7 +26,6 @@ const AppColors_1 = require("../styles/AppColors");
|
|
|
26
26
|
// Constants
|
|
27
27
|
const constants_1 = require("../constants");
|
|
28
28
|
__exportStar(require("./searchQueryParser"), exports);
|
|
29
|
-
__exportStar(require("./telemetry"), exports);
|
|
30
29
|
__exportStar(require("./memoryManager"), exports);
|
|
31
30
|
const getDomainColor = (domain) => {
|
|
32
31
|
if (!domain)
|
package/dist/commonjs/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ 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 {
|
|
16
|
+
export { setupMemoryWarningHandler, pruneAllLogs, subscribeMemoryWarning, type MemoryPruneSummary, } from './helpers';
|
|
17
17
|
export { setMaxNetworkLogsLimit, getMaxNetworkLogsLimit, pruneNetworkLogs, } from './customHooks/networkLogger';
|
|
18
18
|
export { setMaxConsoleLogsLimit, getMaxConsoleLogsLimit, pruneConsoleLogs, } from './customHooks/consoleLogger';
|
|
19
19
|
export { setMaxReduxHistoryLimit, getMaxReduxHistoryLimit, pruneReduxHistory, } from './customHooks/reduxLogger';
|
package/dist/commonjs/index.js
CHANGED
|
@@ -37,8 +37,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.registerComponentProfile = exports.getHermesMemoryStats = exports.measureAsync = exports.trackHeavyTask = exports.trackNavigationTransition = exports.trackComponentRender = exports.useNavigationProfiler = exports.useComponentProfiler = exports.usePerformanceTracker = exports.registerGAPlugin = exports.getEventCategory = exports.getLastActionForReducer = exports.clearActionHistory = exports.getActionHistory = exports.subscribeReduxState = exports.getReduxState = exports.inspectorReduxMiddleware = exports.connectReduxStore = exports.ErrorBoundary = exports.CrashTab = exports.computeCrashFingerprint = exports.recordUserActionBreadcrumb = exports.recordReduxBreadcrumb = exports.recordNetworkBreadcrumb = exports.recordNavigationBreadcrumb = exports.addCrashBreadcrumb = exports.recordCustomCrash = exports.parseCrashStackTrace = exports.exportCrashReport = exports.simulateTestCrash = exports.clearCrashRecords = exports.getCrashRecords = exports.emitCrashEvent = exports.subscribeCrashEvents = exports.setupGlobalCrashHandler = exports.getCollectionEnabled = exports.getDefaultEventParameters = exports.getCurrentUserId = exports.getCurrentUserProperties = exports.clearAnalyticsEvents = exports.subscribeAnalyticsEvents = exports.logAnalyticsEvent = exports.setupAnalyticsLogger = exports.subscribeConsoleLogs = exports.clearConsoleLogs = exports.setupConsoleLogger = exports.addAxiosInterceptors = exports.subscribeNetworkLogs = exports.clearNetworkLogs = exports.setupNetworkLogger = void 0;
|
|
40
|
-
exports.
|
|
41
|
-
exports.BreadcrumbType = exports.CrashFilterType = exports.CrashDetailSubTab = exports.CrashExportFormat = exports.CrashType = exports.PerformanceSubTab = exports.BundleSubTab = exports.DiffResultType = exports.StackFrameType = exports.GAEventCategory = exports.AnalyticsEventSource = exports.ConsoleLogType = exports.LogFilter = exports.SettingsSubTab = exports.SettingsPage = exports.ModalAnimationType = exports.LocalFilter = exports.SortOrder = exports.StatusFilter = exports.Method = exports.ActiveTab = exports.subscribeToStorageChanges = exports.clearStorageDriver = exports.removeStorageEntry = exports.setStorageEntry = exports.fetchStorageEntries = exports.getRegisteredMMKVInstanceIds = exports.isMMKVConnected = exports.isAsyncStorageConnected =
|
|
40
|
+
exports.connectMMKV = exports.connectAsyncStorage = exports.BrandCircleIcon = exports.BrandSquareIcon = exports.prunePerformanceEvents = exports.getMaxPerformanceEventsLimit = exports.setMaxPerformanceEventsLimit = exports.pruneCrashRecords = exports.getMaxCrashLogsLimit = exports.pruneAnalyticsLogs = exports.getMaxAnalyticsLogsLimit = exports.setMaxAnalyticsLogsLimit = exports.pruneReduxHistory = exports.getMaxReduxHistoryLimit = exports.setMaxReduxHistoryLimit = exports.pruneConsoleLogs = exports.getMaxConsoleLogsLimit = exports.setMaxConsoleLogsLimit = exports.pruneNetworkLogs = exports.getMaxNetworkLogsLimit = exports.setMaxNetworkLogsLimit = exports.subscribeMemoryWarning = exports.pruneAllLogs = exports.setupMemoryWarningHandler = exports.isNativeModuleAvailable = exports.setNativeStorageItem = exports.getNativeStorageItem = exports.getNativeFpsMetrics = exports.stopNativeFpsMonitoring = exports.startNativeFpsMonitoring = exports.subscribeNativeDeviceShake = exports.subscribeNativeFloatingButtonPress = exports.setNativeFloatingButtonBadge = exports.hideNativeFloatingButton = exports.showNativeFloatingButton = exports.subscribeNativeCrashes = exports.enableNativeCrashProtection = exports.getNativeDeviceMetrics = exports.InspectCatch = exports.InspectTrackTime = exports.InspectLog = exports.generateFixSnippet = exports.getInitialPerformanceEvents = exports.getInitialRenderProfiles = exports.getPerformanceEvents = exports.subscribePerformanceEvents = exports.clearPerformanceEvents = exports.logPerformanceEvent = exports.getRenderProfiles = exports.subscribeRenderProfiles = void 0;
|
|
41
|
+
exports.BreadcrumbType = exports.CrashFilterType = exports.CrashDetailSubTab = exports.CrashExportFormat = exports.CrashType = exports.PerformanceSubTab = exports.BundleSubTab = exports.DiffResultType = exports.StackFrameType = exports.GAEventCategory = exports.AnalyticsEventSource = exports.ConsoleLogType = exports.LogFilter = exports.SettingsSubTab = exports.SettingsPage = exports.ModalAnimationType = exports.LocalFilter = exports.SortOrder = exports.StatusFilter = exports.Method = exports.ActiveTab = exports.subscribeToStorageChanges = exports.clearStorageDriver = exports.removeStorageEntry = exports.setStorageEntry = exports.fetchStorageEntries = exports.getRegisteredMMKVInstanceIds = exports.isMMKVConnected = exports.isAsyncStorageConnected = void 0;
|
|
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");
|
|
@@ -758,14 +758,6 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
758
758
|
}, [unreadPulseAnim]);
|
|
759
759
|
const isNativeModule = (0, react_1.useMemo)(() => (0, NativeInspector_2.isNativeModuleAvailable)(), []);
|
|
760
760
|
const useNativeFab = (react_native_1.Platform.OS === 'ios' || react_native_1.Platform.OS === 'android') && isNativeModule;
|
|
761
|
-
// Send anonymous initialization heartbeat to GA4 Measurement Protocol
|
|
762
|
-
(0, react_1.useEffect)(() => {
|
|
763
|
-
(0, helpers_1.sendSessionTelemetryPing)({
|
|
764
|
-
environment,
|
|
765
|
-
hasNavigation: Boolean(navigationRef),
|
|
766
|
-
hasAppIcon: Boolean(appIcon),
|
|
767
|
-
});
|
|
768
|
-
}, [environment, navigationRef, appIcon]);
|
|
769
761
|
// 100% Native Main-Thread Floating Button Lifecycle
|
|
770
762
|
(0, react_1.useEffect)(() => {
|
|
771
763
|
if (!useNativeFab || !isEnabled || !enabled) {
|
|
@@ -820,8 +812,6 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
|
|
|
820
812
|
? defaultTab
|
|
821
813
|
: 'apis';
|
|
822
814
|
setActiveTab(target);
|
|
823
|
-
// Track inspector opened event in GA4
|
|
824
|
-
(0, helpers_1.trackInspectorOpen)({ activeTab: target });
|
|
825
815
|
// Instant synchronization of data collected while modal was closed
|
|
826
816
|
if (latestNetworkLogsRef.current.length > 0) {
|
|
827
817
|
const deduped = (0, helpers_1.deduplicateLogs)(latestNetworkLogsRef.current);
|
|
@@ -1942,13 +1932,6 @@ Object.defineProperty(exports, "getNativeStorageItem", { enumerable: true, get:
|
|
|
1942
1932
|
Object.defineProperty(exports, "setNativeStorageItem", { enumerable: true, get: function () { return NativeInspector_3.setNativeStorageItem; } });
|
|
1943
1933
|
Object.defineProperty(exports, "isNativeModuleAvailable", { enumerable: true, get: function () { return NativeInspector_3.isNativeModuleAvailable; } });
|
|
1944
1934
|
var helpers_2 = require("./helpers");
|
|
1945
|
-
Object.defineProperty(exports, "sendSessionTelemetryPing", { enumerable: true, get: function () { return helpers_2.sendSessionTelemetryPing; } });
|
|
1946
|
-
Object.defineProperty(exports, "trackTelemetryEvent", { enumerable: true, get: function () { return helpers_2.trackTelemetryEvent; } });
|
|
1947
|
-
Object.defineProperty(exports, "trackInspectorOpen", { enumerable: true, get: function () { return helpers_2.trackInspectorOpen; } });
|
|
1948
|
-
Object.defineProperty(exports, "trackTabSwitch", { enumerable: true, get: function () { return helpers_2.trackTabSwitch; } });
|
|
1949
|
-
Object.defineProperty(exports, "trackLogExport", { enumerable: true, get: function () { return helpers_2.trackLogExport; } });
|
|
1950
|
-
Object.defineProperty(exports, "GA4_MEASUREMENT_ID", { enumerable: true, get: function () { return helpers_2.GA4_MEASUREMENT_ID; } });
|
|
1951
|
-
Object.defineProperty(exports, "GA4_API_SECRET", { enumerable: true, get: function () { return helpers_2.GA4_API_SECRET; } });
|
|
1952
1935
|
Object.defineProperty(exports, "setupMemoryWarningHandler", { enumerable: true, get: function () { return helpers_2.setupMemoryWarningHandler; } });
|
|
1953
1936
|
Object.defineProperty(exports, "pruneAllLogs", { enumerable: true, get: function () { return helpers_2.pruneAllLogs; } });
|
|
1954
1937
|
Object.defineProperty(exports, "subscribeMemoryWarning", { enumerable: true, get: function () { return helpers_2.subscribeMemoryWarning; } });
|
|
@@ -10,37 +10,11 @@ import { AppFonts } from '../../styles/AppFonts';
|
|
|
10
10
|
import { METHOD_COLORS } from '../../constants';
|
|
11
11
|
import { LIB_VERSION } from '../../constants';
|
|
12
12
|
import { getStatusColor, getAppName, formatTime, getSize } from '../../helpers';
|
|
13
|
-
import { getTelemetryConsentStatus } from '../../helpers/telemetry';
|
|
14
13
|
import { UpdateAvailableModal } from './UpdateAvailableModal';
|
|
15
14
|
import { WhiteBackNavigation, TrashIcon, SettingsIcon, CloseWhite, ClockIcon, SizeIcon, AppleIcon, AndroidIcon, NpmIcon, ResetIcon, BoltIcon, } from '../NetworkIcons';
|
|
16
15
|
const InspectorHeader = React.memo(() => {
|
|
17
16
|
const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = useInspector();
|
|
18
17
|
const [showUpdateModal, setShowUpdateModal] = React.useState(false);
|
|
19
|
-
const [isTelemetryActive, setIsTelemetryActive] = React.useState(false);
|
|
20
|
-
const telemetryPulseAnim = React.useRef(new Animated.Value(1)).current;
|
|
21
|
-
React.useEffect(() => {
|
|
22
|
-
getTelemetryConsentStatus().then(status => {
|
|
23
|
-
setIsTelemetryActive(status === 'granted');
|
|
24
|
-
});
|
|
25
|
-
}, [visible]);
|
|
26
|
-
React.useEffect(() => {
|
|
27
|
-
if (!isTelemetryActive)
|
|
28
|
-
return;
|
|
29
|
-
const pulse = Animated.loop(Animated.sequence([
|
|
30
|
-
Animated.timing(telemetryPulseAnim, {
|
|
31
|
-
toValue: 2.2,
|
|
32
|
-
duration: 1500,
|
|
33
|
-
useNativeDriver: true,
|
|
34
|
-
}),
|
|
35
|
-
Animated.timing(telemetryPulseAnim, {
|
|
36
|
-
toValue: 1,
|
|
37
|
-
duration: 0,
|
|
38
|
-
useNativeDriver: true,
|
|
39
|
-
}),
|
|
40
|
-
]));
|
|
41
|
-
pulse.start();
|
|
42
|
-
return () => pulse.stop();
|
|
43
|
-
}, [isTelemetryActive, telemetryPulseAnim]);
|
|
44
18
|
const envConfig = useMemo(() => {
|
|
45
19
|
const rawEnv = (environment || (__DEV__ ? 'DEV' : 'PROD')).trim();
|
|
46
20
|
const clean = rawEnv.toUpperCase();
|
|
@@ -333,53 +307,6 @@ const InspectorHeader = React.memo(() => {
|
|
|
333
307
|
●
|
|
334
308
|
</Text>)}
|
|
335
309
|
</Pressable>
|
|
336
|
-
|
|
337
|
-
{isTelemetryActive && (<Pressable onPress={() => Alert.alert('Anonymous Telemetry Active', 'Anonymous diagnostics (such as React Native version, JavaScript engine, and device model) are currently enabled to help improve library tooling.\n\nNo user data or network payloads are captured. You can toggle this anytime in Settings.', [{ text: 'Got it' }])} style={{
|
|
338
|
-
flexDirection: 'row',
|
|
339
|
-
alignItems: 'center',
|
|
340
|
-
backgroundColor: 'rgba(16, 185, 129, 0.22)',
|
|
341
|
-
borderRadius: 5,
|
|
342
|
-
paddingHorizontal: 5.5,
|
|
343
|
-
paddingVertical: 2,
|
|
344
|
-
gap: 4.5,
|
|
345
|
-
borderWidth: 1,
|
|
346
|
-
borderColor: 'rgba(52, 211, 153, 0.45)',
|
|
347
|
-
flexShrink: 0,
|
|
348
|
-
}}>
|
|
349
|
-
<View style={{
|
|
350
|
-
width: 6,
|
|
351
|
-
height: 6,
|
|
352
|
-
alignItems: 'center',
|
|
353
|
-
justifyContent: 'center',
|
|
354
|
-
}}>
|
|
355
|
-
<Animated.View style={{
|
|
356
|
-
position: 'absolute',
|
|
357
|
-
width: 6,
|
|
358
|
-
height: 6,
|
|
359
|
-
borderRadius: 3,
|
|
360
|
-
backgroundColor: '#34D399',
|
|
361
|
-
opacity: telemetryPulseAnim.interpolate({
|
|
362
|
-
inputRange: [1, 2.2],
|
|
363
|
-
outputRange: [0.8, 0],
|
|
364
|
-
}),
|
|
365
|
-
transform: [{ scale: telemetryPulseAnim }],
|
|
366
|
-
}}/>
|
|
367
|
-
<View style={{
|
|
368
|
-
width: 4,
|
|
369
|
-
height: 4,
|
|
370
|
-
borderRadius: 2,
|
|
371
|
-
backgroundColor: '#10B981',
|
|
372
|
-
}}/>
|
|
373
|
-
</View>
|
|
374
|
-
<Text style={{
|
|
375
|
-
fontFamily: AppFonts.interBold,
|
|
376
|
-
fontSize: 9,
|
|
377
|
-
color: '#6EE7B7',
|
|
378
|
-
letterSpacing: 0.2,
|
|
379
|
-
}}>
|
|
380
|
-
LIVE
|
|
381
|
-
</Text>
|
|
382
|
-
</Pressable>)}
|
|
383
310
|
</View>
|
|
384
311
|
</View>
|
|
385
312
|
</View>) : null}
|
|
@@ -20,7 +20,6 @@ import CrashDetail from './CrashDetail';
|
|
|
20
20
|
import DeviceInfoTab from './DeviceInfoTab';
|
|
21
21
|
import StorageTab from './StorageTab';
|
|
22
22
|
import SettingsPanel from './SettingsPanel';
|
|
23
|
-
import TelemetryConsentModal from './TelemetryConsentModal';
|
|
24
23
|
import NpmUpdateToast from './NpmUpdateToast';
|
|
25
24
|
import Toast from '../Toast';
|
|
26
25
|
import styles from '../../styles';
|
|
@@ -176,9 +175,6 @@ const MainScreen = () => {
|
|
|
176
175
|
|
|
177
176
|
{/* NPM Version Update Toast with timeout progress bar */}
|
|
178
177
|
<NpmUpdateToast />
|
|
179
|
-
|
|
180
|
-
{/* Anonymous Telemetry Consent Dialog shown ONLY when inspector is active */}
|
|
181
|
-
<TelemetryConsentModal />
|
|
182
178
|
</View>
|
|
183
179
|
</View>
|
|
184
180
|
</ErrorBoundary>)}
|
|
@@ -17,7 +17,6 @@ import { clearPerformanceEvents } from '../../customHooks/performanceTracker';
|
|
|
17
17
|
import { isReduxConnected } from '../../customHooks/reduxLogger';
|
|
18
18
|
import { isAnalyticsConnected } from '../../customHooks/analyticsLogger';
|
|
19
19
|
import { useTranslation } from '../../i18n';
|
|
20
|
-
import { getTelemetryConsentStatus, setTelemetryConsent, sendSessionTelemetryPing, } from '../../helpers/telemetry';
|
|
21
20
|
import { SignalIcon, TerminalIcon, AnalyticsIcon, SettingsIcon, SunIcon, MoonIcon, ScreenIcon, MotionIcon, LayersIcon, EyeIcon, CheckIcon, TrashIcon, PackageIcon, ReduxIcon, PerformanceIcon, CrashIcon, ShieldAlertIcon, ForwardChevronIcon, ChevronDownIcon, NpmIcon, BoltIcon, BrainIcon, SmartphoneIcon, DatabaseIcon, } from '../NetworkIcons';
|
|
22
21
|
import { LIB_VERSION } from '../../constants';
|
|
23
22
|
import { copyToClipboard } from '../../helpers';
|
|
@@ -27,20 +26,6 @@ const SettingsPanel = () => {
|
|
|
27
26
|
const { t } = useTranslation();
|
|
28
27
|
const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, showUpdateToast, setShowUpdateToast, showConsoleLevels, setShowConsoleLevels, resetToDefaults, storage, logs, consoleLogs, analyticsEvents, reduxState, maxNetworkLogs, setMaxNetworkLogs, maxConsoleLogs, setMaxConsoleLogs, maxAnalyticsEventsLimit, setMaxAnalyticsEventsLimit, isAutoRamLimitEnabled, setIsAutoRamLimitEnabled, deviceFreeRamMb, reduxAutoRefresh, setReduxAutoRefreshState, reduxExpandDepth, setReduxExpandDepth, switchActiveTab, setSelected, setSelectedEvent, setReduxState, crashRecords, maxCrashLogs, setMaxCrashLogs, updateAvailable, latestNpmVersion, } = useInspector();
|
|
29
28
|
const [stagedHeight, setStagedHeight] = useState(modalHeightPercent);
|
|
30
|
-
const [telemetryConsent, setTelemetryConsentState] = useState(true);
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
getTelemetryConsentStatus().then(status => {
|
|
33
|
-
setTelemetryConsentState(status === 'granted');
|
|
34
|
-
});
|
|
35
|
-
}, []);
|
|
36
|
-
const handleToggleTelemetry = async () => {
|
|
37
|
-
const nextVal = !telemetryConsent;
|
|
38
|
-
setTelemetryConsentState(nextVal);
|
|
39
|
-
await setTelemetryConsent(nextVal);
|
|
40
|
-
if (nextVal) {
|
|
41
|
-
sendSessionTelemetryPing({ force: true });
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
29
|
useEffect(() => {
|
|
45
30
|
setStagedHeight(modalHeightPercent);
|
|
46
31
|
}, [modalHeightPercent]);
|
|
@@ -1197,97 +1182,7 @@ const SettingsPanel = () => {
|
|
|
1197
1182
|
</View>
|
|
1198
1183
|
</View>
|
|
1199
1184
|
|
|
1200
|
-
{/* Section 4:
|
|
1201
|
-
<View style={{
|
|
1202
|
-
backgroundColor: AppColors.primaryLight,
|
|
1203
|
-
borderRadius: 14,
|
|
1204
|
-
borderWidth: 1,
|
|
1205
|
-
borderColor: AppColors.grayBorderSecondary,
|
|
1206
|
-
overflow: 'hidden',
|
|
1207
|
-
padding: 14,
|
|
1208
|
-
gap: 12,
|
|
1209
|
-
}}>
|
|
1210
|
-
<Text style={{
|
|
1211
|
-
fontFamily: AppFonts.interBold,
|
|
1212
|
-
fontSize: 11,
|
|
1213
|
-
lineHeight: 14,
|
|
1214
|
-
color: AppColors.grayTextWeak,
|
|
1215
|
-
letterSpacing: 0.8,
|
|
1216
|
-
}}>
|
|
1217
|
-
PRIVACY & ANONYMOUS DIAGNOSTICS
|
|
1218
|
-
</Text>
|
|
1219
|
-
|
|
1220
|
-
<View style={{
|
|
1221
|
-
flexDirection: 'row',
|
|
1222
|
-
alignItems: 'center',
|
|
1223
|
-
justifyContent: 'space-between',
|
|
1224
|
-
}}>
|
|
1225
|
-
<View style={{
|
|
1226
|
-
flexDirection: 'row',
|
|
1227
|
-
alignItems: 'center',
|
|
1228
|
-
gap: 10,
|
|
1229
|
-
flex: 1,
|
|
1230
|
-
marginRight: 10,
|
|
1231
|
-
}}>
|
|
1232
|
-
<View style={{
|
|
1233
|
-
width: 32,
|
|
1234
|
-
height: 32,
|
|
1235
|
-
borderRadius: 8,
|
|
1236
|
-
backgroundColor: AppColors.purpleShade50,
|
|
1237
|
-
alignItems: 'center',
|
|
1238
|
-
justifyContent: 'center',
|
|
1239
|
-
}}>
|
|
1240
|
-
<ShieldAlertIcon color={AppColors.purple} size={15}/>
|
|
1241
|
-
</View>
|
|
1242
|
-
<View style={{ flex: 1 }}>
|
|
1243
|
-
<Text style={{
|
|
1244
|
-
fontFamily: AppFonts.interBold,
|
|
1245
|
-
fontSize: 13.5,
|
|
1246
|
-
lineHeight: 18,
|
|
1247
|
-
color: AppColors.primaryBlack,
|
|
1248
|
-
}}>
|
|
1249
|
-
Help Improve In-App Inspector
|
|
1250
|
-
</Text>
|
|
1251
|
-
<Text style={{
|
|
1252
|
-
fontFamily: AppFonts.interRegular,
|
|
1253
|
-
fontSize: 11,
|
|
1254
|
-
lineHeight: 15,
|
|
1255
|
-
color: AppColors.grayText,
|
|
1256
|
-
marginTop: 1,
|
|
1257
|
-
}}>
|
|
1258
|
-
Share non-identifiable technical metrics (RN version, JS
|
|
1259
|
-
engine, device model). No user data or network payloads
|
|
1260
|
-
are captured.
|
|
1261
|
-
</Text>
|
|
1262
|
-
</View>
|
|
1263
|
-
</View>
|
|
1264
|
-
|
|
1265
|
-
<TouchableScale accessible={true} accessibilityRole="switch" accessibilityLabel="Toggle Anonymous Telemetry" accessibilityState={{ checked: telemetryConsent }} onPress={handleToggleTelemetry} style={{
|
|
1266
|
-
width: 42,
|
|
1267
|
-
height: 24,
|
|
1268
|
-
borderRadius: 12,
|
|
1269
|
-
backgroundColor: telemetryConsent
|
|
1270
|
-
? AppColors.purple
|
|
1271
|
-
: AppColors.grayBorderSecondary,
|
|
1272
|
-
padding: 2,
|
|
1273
|
-
justifyContent: 'center',
|
|
1274
|
-
alignItems: telemetryConsent ? 'flex-end' : 'flex-start',
|
|
1275
|
-
}}>
|
|
1276
|
-
<View style={{
|
|
1277
|
-
width: 20,
|
|
1278
|
-
height: 20,
|
|
1279
|
-
borderRadius: 10,
|
|
1280
|
-
backgroundColor: AppColors.white,
|
|
1281
|
-
shadowColor: AppColors.black,
|
|
1282
|
-
shadowOpacity: 0.18,
|
|
1283
|
-
shadowRadius: 2,
|
|
1284
|
-
shadowOffset: { width: 0, height: 1 },
|
|
1285
|
-
}}/>
|
|
1286
|
-
</TouchableScale>
|
|
1287
|
-
</View>
|
|
1288
|
-
</View>
|
|
1289
|
-
|
|
1290
|
-
{/* Section 5: Notifications & Toasts */}
|
|
1185
|
+
{/* Section 4: Notifications & Toasts */}
|
|
1291
1186
|
<View style={{
|
|
1292
1187
|
backgroundColor: AppColors.primaryLight,
|
|
1293
1188
|
borderRadius: 14,
|
|
@@ -1376,7 +1271,7 @@ const SettingsPanel = () => {
|
|
|
1376
1271
|
</View>
|
|
1377
1272
|
</View>
|
|
1378
1273
|
|
|
1379
|
-
{/* Section
|
|
1274
|
+
{/* Section 5: NPM Package & Updates */}
|
|
1380
1275
|
<View style={{
|
|
1381
1276
|
backgroundColor: AppColors.primaryLight,
|
|
1382
1277
|
borderRadius: 14,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LIB_VERSION = "2.2.
|
|
1
|
+
export declare const LIB_VERSION = "2.2.6";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { NetworkLog, RouteInfo, DiffResult, JsonContent, StackFrameType } from '../types';
|
|
2
2
|
export * from './searchQueryParser';
|
|
3
|
-
export * from './telemetry';
|
|
4
3
|
export * from './memoryManager';
|
|
5
4
|
export declare const getDomainColor: (domain: string) => string;
|
|
6
5
|
export declare const formatDateTime: (timestamp: number) => string;
|
|
@@ -6,7 +6,6 @@ import { AppColors } from '../styles/AppColors';
|
|
|
6
6
|
// Constants
|
|
7
7
|
import { DOMAIN_COLORS, DURATION_FAST_MS, DURATION_SLOW_MS } from '../constants';
|
|
8
8
|
export * from './searchQueryParser';
|
|
9
|
-
export * from './telemetry';
|
|
10
9
|
export * from './memoryManager';
|
|
11
10
|
export const getDomainColor = (domain) => {
|
|
12
11
|
if (!domain)
|