react-native-inapp-inspector 2.0.4 → 2.0.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.
Files changed (108) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  3. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  4. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  5. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  6. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  7. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  8. package/android/.gradle/8.9/gc.properties +0 -0
  9. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  10. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  11. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  12. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  13. package/android/.gradle/9.2.0/gc.properties +0 -0
  14. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  15. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  16. package/android/.gradle/vcs-1/gc.properties +0 -0
  17. package/android/build/reports/problems/problems-report.html +659 -0
  18. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +11 -0
  19. package/dist/commonjs/components/Inspector/AuditTab.d.ts +3 -0
  20. package/dist/commonjs/components/Inspector/AuditTab.js +741 -0
  21. package/dist/commonjs/components/Inspector/DeviceTab.d.ts +3 -0
  22. package/dist/commonjs/components/Inspector/DeviceTab.js +717 -0
  23. package/dist/commonjs/components/Inspector/InspectorHeader.js +115 -75
  24. package/dist/commonjs/components/Inspector/MainScreen.js +16 -2
  25. package/dist/commonjs/components/Inspector/NetworkDetail.js +15 -0
  26. package/dist/commonjs/components/Inspector/NetworkTab.js +317 -12
  27. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +88 -39
  28. package/dist/commonjs/components/Inspector/PerformanceHud.d.ts +7 -0
  29. package/dist/commonjs/components/Inspector/PerformanceHud.js +210 -0
  30. package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -18
  31. package/dist/commonjs/components/Inspector/RequestReplayModal.d.ts +9 -0
  32. package/dist/commonjs/components/Inspector/RequestReplayModal.js +792 -0
  33. package/dist/commonjs/components/Inspector/RequestReplayView.d.ts +8 -0
  34. package/dist/commonjs/components/Inspector/RequestReplayView.js +871 -0
  35. package/dist/commonjs/components/Inspector/SettingsPanel.js +847 -370
  36. package/dist/commonjs/components/Inspector/StorageTab.d.ts +3 -0
  37. package/dist/commonjs/components/Inspector/StorageTab.js +610 -0
  38. package/dist/commonjs/components/Inspector/TabBar.js +23 -2
  39. package/dist/commonjs/components/Inspector/UpdateAvailableModal.d.ts +8 -0
  40. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +469 -0
  41. package/dist/commonjs/components/NetworkIcons.d.ts +12 -0
  42. package/dist/commonjs/components/NetworkIcons.js +72 -3
  43. package/dist/commonjs/constants/version.d.ts +1 -1
  44. package/dist/commonjs/constants/version.js +1 -1
  45. package/dist/commonjs/customHooks/storageInspector.d.ts +13 -0
  46. package/dist/commonjs/customHooks/storageInspector.js +179 -0
  47. package/dist/commonjs/helpers/deviceInfo.d.ts +4 -0
  48. package/dist/commonjs/helpers/deviceInfo.js +94 -0
  49. package/dist/commonjs/helpers/index.d.ts +2 -0
  50. package/dist/commonjs/helpers/index.js +12 -1
  51. package/dist/commonjs/helpers/packageAuditor.d.ts +5 -0
  52. package/dist/commonjs/helpers/packageAuditor.js +182 -0
  53. package/dist/commonjs/helpers/searchQueryParser.d.ts +8 -3
  54. package/dist/commonjs/helpers/searchQueryParser.js +85 -31
  55. package/dist/commonjs/helpers/telemetry.js +4 -4
  56. package/dist/commonjs/i18n/locales/en.json +3 -2
  57. package/dist/commonjs/index.d.ts +1 -0
  58. package/dist/commonjs/index.js +171 -16
  59. package/dist/commonjs/native/NativeInspector.d.ts +1 -0
  60. package/dist/commonjs/types/enums.d.ts +7 -0
  61. package/dist/commonjs/types/enums.js +7 -0
  62. package/dist/commonjs/types/interfaces.d.ts +82 -0
  63. package/dist/esm/components/Inspector/AuditTab.d.ts +3 -0
  64. package/dist/esm/components/Inspector/AuditTab.js +702 -0
  65. package/dist/esm/components/Inspector/DeviceTab.d.ts +3 -0
  66. package/dist/esm/components/Inspector/DeviceTab.js +678 -0
  67. package/dist/esm/components/Inspector/InspectorHeader.js +115 -75
  68. package/dist/esm/components/Inspector/MainScreen.js +16 -2
  69. package/dist/esm/components/Inspector/NetworkDetail.js +16 -1
  70. package/dist/esm/components/Inspector/NetworkTab.js +317 -12
  71. package/dist/esm/components/Inspector/NpmUpdateToast.js +88 -39
  72. package/dist/esm/components/Inspector/PerformanceHud.d.ts +7 -0
  73. package/dist/esm/components/Inspector/PerformanceHud.js +170 -0
  74. package/dist/esm/components/Inspector/PerformanceTab.js +31 -19
  75. package/dist/esm/components/Inspector/RequestReplayModal.d.ts +9 -0
  76. package/dist/esm/components/Inspector/RequestReplayModal.js +752 -0
  77. package/dist/esm/components/Inspector/RequestReplayView.d.ts +8 -0
  78. package/dist/esm/components/Inspector/RequestReplayView.js +831 -0
  79. package/dist/esm/components/Inspector/SettingsPanel.js +848 -371
  80. package/dist/esm/components/Inspector/StorageTab.d.ts +3 -0
  81. package/dist/esm/components/Inspector/StorageTab.js +571 -0
  82. package/dist/esm/components/Inspector/TabBar.js +24 -3
  83. package/dist/esm/components/Inspector/UpdateAvailableModal.d.ts +8 -0
  84. package/dist/esm/components/Inspector/UpdateAvailableModal.js +432 -0
  85. package/dist/esm/components/NetworkIcons.d.ts +12 -0
  86. package/dist/esm/components/NetworkIcons.js +57 -0
  87. package/dist/esm/constants/version.d.ts +1 -1
  88. package/dist/esm/constants/version.js +1 -1
  89. package/dist/esm/customHooks/storageInspector.d.ts +13 -0
  90. package/dist/esm/customHooks/storageInspector.js +170 -0
  91. package/dist/esm/helpers/deviceInfo.d.ts +4 -0
  92. package/dist/esm/helpers/deviceInfo.js +89 -0
  93. package/dist/esm/helpers/index.d.ts +2 -0
  94. package/dist/esm/helpers/index.js +10 -0
  95. package/dist/esm/helpers/packageAuditor.d.ts +5 -0
  96. package/dist/esm/helpers/packageAuditor.js +173 -0
  97. package/dist/esm/helpers/searchQueryParser.d.ts +8 -3
  98. package/dist/esm/helpers/searchQueryParser.js +85 -31
  99. package/dist/esm/helpers/telemetry.js +4 -4
  100. package/dist/esm/i18n/locales/en.json +3 -2
  101. package/dist/esm/index.d.ts +1 -0
  102. package/dist/esm/index.js +167 -15
  103. package/dist/esm/native/NativeInspector.d.ts +1 -0
  104. package/dist/esm/types/enums.d.ts +7 -0
  105. package/dist/esm/types/enums.js +7 -0
  106. package/dist/esm/types/interfaces.d.ts +82 -0
  107. package/ios/NetworkInspectorModule.mm +12 -5
  108. package/package.json +4 -1
@@ -3,38 +3,74 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.matchNetworkLogQuery = matchNetworkLogQuery;
4
4
  /**
5
5
  * Parses query strings like `method:POST is:error slow:>1s status:200 auth`
6
- * and checks whether a given NetworkLog matches all tokens.
6
+ * and checks whether a given NetworkLog matches all tokens against the specified scope.
7
7
  */
8
- function matchNetworkLogQuery(log, searchQuery, routePath) {
8
+ function matchNetworkLogQuery(log, searchQuery, routePath, options) {
9
9
  if (!searchQuery || searchQuery.trim().length === 0)
10
10
  return true;
11
- const rawTokens = searchQuery
12
- .trim()
13
- .match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || [];
11
+ const rawTokens = searchQuery.trim().match(/(?:[^\s"']+|"[^"]*"|'[^']*')+/g) || [];
14
12
  if (rawTokens.length === 0)
15
13
  return true;
16
- const methodStr = (log.method || '').toLowerCase();
17
- const urlStr = (log.url || '').toLowerCase();
18
- const statusNum = typeof log.status === 'number' ? log.status : parseInt(String(log.status || 0), 10);
14
+ const isCaseSensitive = Boolean(options?.isCaseSensitive);
15
+ const isRegex = Boolean(options?.isRegex);
16
+ const scope = options?.scope || 'all';
17
+ const methodRaw = log.method || '';
18
+ const urlRaw = log.url || '';
19
+ const statusNum = typeof log.status === 'number'
20
+ ? log.status
21
+ : parseInt(String(log.status || 0), 10);
19
22
  const statusStr = String(log.status ?? '');
20
23
  const durationNum = log.duration || 0;
21
- const clientStr = (log.client || '').toLowerCase();
22
- const reqStr = typeof log.request === 'string' ? log.request : JSON.stringify(log.request || '');
23
- const resStr = typeof log.response === 'string' ? log.response : JSON.stringify(log.response || '');
24
- const reqHeadersStr = JSON.stringify(log.requestHeaders || '').toLowerCase();
25
- const resHeadersStr = JSON.stringify(log.responseHeaders || '').toLowerCase();
26
- const pathStr = routePath ? routePath.toLowerCase() : '';
27
- const fullSearchCorpus = [
28
- methodStr,
29
- urlStr,
30
- statusStr,
31
- pathStr,
32
- clientStr,
33
- reqStr.toLowerCase(),
34
- resStr.toLowerCase(),
35
- reqHeadersStr,
36
- resHeadersStr,
37
- ].join(' ');
24
+ const clientRaw = log.client || '';
25
+ const reqRaw = typeof log.request === 'string'
26
+ ? log.request
27
+ : JSON.stringify(log.request || '');
28
+ const resRaw = typeof log.response === 'string'
29
+ ? log.response
30
+ : JSON.stringify(log.response || '');
31
+ const reqHeadersRaw = JSON.stringify(log.requestHeaders || '');
32
+ const resHeadersRaw = JSON.stringify(log.responseHeaders || '');
33
+ const pathRaw = routePath || '';
34
+ // Construct search corpus based on active scope
35
+ const getScopedCorpus = (caseSens) => {
36
+ let parts = [];
37
+ if (scope === 'url') {
38
+ parts = [methodRaw, urlRaw, pathRaw];
39
+ }
40
+ else if (scope === 'reqBody') {
41
+ parts = [reqRaw];
42
+ }
43
+ else if (scope === 'resBody') {
44
+ parts = [resRaw];
45
+ }
46
+ else if (scope === 'headers') {
47
+ parts = [reqHeadersRaw, resHeadersRaw];
48
+ }
49
+ else {
50
+ parts = [
51
+ methodRaw,
52
+ urlRaw,
53
+ statusStr,
54
+ pathRaw,
55
+ clientRaw,
56
+ reqRaw,
57
+ resRaw,
58
+ reqHeadersRaw,
59
+ resHeadersRaw,
60
+ ];
61
+ }
62
+ const combined = parts.join(' ');
63
+ return caseSens ? combined : combined.toLowerCase();
64
+ };
65
+ const targetCorpus = getScopedCorpus(isCaseSensitive);
66
+ const methodStr = methodRaw.toLowerCase();
67
+ const urlStr = urlRaw.toLowerCase();
68
+ const clientStr = clientRaw.toLowerCase();
69
+ const reqStr = reqRaw.toLowerCase();
70
+ const resStr = resRaw.toLowerCase();
71
+ const reqHeadersStr = reqHeadersRaw.toLowerCase();
72
+ const resHeadersStr = resHeadersRaw.toLowerCase();
73
+ const pathStr = pathRaw.toLowerCase();
38
74
  for (const rawToken of rawTokens) {
39
75
  const token = rawToken.replace(/^["']|["']$/g, '').trim();
40
76
  if (!token)
@@ -96,7 +132,10 @@ function matchNetworkLogQuery(log, searchQuery, routePath) {
96
132
  // 3. is:<FLAG>
97
133
  if (lowerToken.startsWith('is:')) {
98
134
  const flag = lowerToken.slice(3).trim();
99
- if (flag === 'error' || flag === 'failed' || flag === 'err' || flag === 'fail') {
135
+ if (flag === 'error' ||
136
+ flag === 'failed' ||
137
+ flag === 'err' ||
138
+ flag === 'fail') {
100
139
  const isErr = log.status === 0 || log.status == null || statusNum >= 400;
101
140
  if (!isErr)
102
141
  return false;
@@ -208,14 +247,14 @@ function matchNetworkLogQuery(log, searchQuery, routePath) {
208
247
  // 8. req:<TERM> or body:<TERM>
209
248
  if (lowerToken.startsWith('req:') || lowerToken.startsWith('body:')) {
210
249
  const target = lowerToken.replace(/^(req:|body:)/, '').trim();
211
- if (!reqStr.toLowerCase().includes(target))
250
+ if (!reqStr.includes(target))
212
251
  return false;
213
252
  continue;
214
253
  }
215
254
  // 9. res:<TERM>
216
255
  if (lowerToken.startsWith('res:')) {
217
256
  const target = lowerToken.slice(4).trim();
218
- if (!resStr.toLowerCase().includes(target))
257
+ if (!resStr.includes(target))
219
258
  return false;
220
259
  continue;
221
260
  }
@@ -227,9 +266,24 @@ function matchNetworkLogQuery(log, searchQuery, routePath) {
227
266
  }
228
267
  continue;
229
268
  }
230
- // 11. Generic Plain Substring Match
231
- if (!fullSearchCorpus.includes(lowerToken)) {
232
- return false;
269
+ // 11. Generic Match (handles Regex, Case-sensitivity, and Scoped corpus)
270
+ if (isRegex) {
271
+ try {
272
+ const re = new RegExp(token, isCaseSensitive ? '' : 'i');
273
+ if (!re.test(targetCorpus))
274
+ return false;
275
+ }
276
+ catch {
277
+ const queryTerm = isCaseSensitive ? token : lowerToken;
278
+ if (!targetCorpus.includes(queryTerm))
279
+ return false;
280
+ }
281
+ }
282
+ else {
283
+ const queryTerm = isCaseSensitive ? token : lowerToken;
284
+ if (!targetCorpus.includes(queryTerm)) {
285
+ return false;
286
+ }
233
287
  }
234
288
  }
235
289
  return true;
@@ -31,8 +31,8 @@ const constants_1 = require("../constants");
31
31
  const NativeInspector_1 = require("../native/NativeInspector");
32
32
  // ─── GA4 Measurement Protocol Configuration ──────────────────────────────────
33
33
  // Automatically replaced at build-time from .env by scripts/inject-telemetry.js
34
- exports.GA4_MEASUREMENT_ID = 'G-XXXXXXXXXX';
35
- exports.GA4_API_SECRET = 'YOUR_GA4_API_SECRET';
34
+ exports.GA4_MEASUREMENT_ID = 'G-3QGMQVZX5V';
35
+ exports.GA4_API_SECRET = 'C46RQZ3PTfmHDnLnvU3KIg';
36
36
  const GA4_ENDPOINT = 'https://www.google-analytics.com/mp/collect';
37
37
  const CLIENT_ID_KEY = 'telemetry_client_id';
38
38
  // Stable session ID created once per JavaScript runtime instance
@@ -254,9 +254,9 @@ async function trackTelemetryEvent(eventName, params = {}, options) {
254
254
  return;
255
255
  // Don't send if credentials haven't been configured yet
256
256
  if (!exports.GA4_MEASUREMENT_ID ||
257
- exports.GA4_MEASUREMENT_ID === 'G-XXXXXXXXXX' ||
257
+ exports.GA4_MEASUREMENT_ID === 'G-3QGMQVZX5V' ||
258
258
  !exports.GA4_API_SECRET ||
259
- exports.GA4_API_SECRET === 'YOUR_GA4_API_SECRET') {
259
+ exports.GA4_API_SECRET === 'C46RQZ3PTfmHDnLnvU3KIg') {
260
260
  return;
261
261
  }
262
262
  try {
@@ -50,8 +50,9 @@
50
50
  "activeBadge": "ACTIVE",
51
51
  "dormantBadge": "DORMANT",
52
52
  "protectedBadge": "PROTECTED",
53
- "modulesAndTools": "Modules & Tools",
54
- "uiPreferences": "UI Preferences",
53
+ "modulesAndTools": "Modules & Tabs",
54
+ "ramLimits": "RAM & Limits",
55
+ "uiPreferences": "UI & Appearance",
55
56
  "zeroOverheadTitle": "Zero Background Overhead",
56
57
  "zeroOverheadDesc": "Check the modules you wish to activate. Disabled modules consume 0% CPU & memory until saved.",
57
58
  "unsavedPending": "● Unsaved selections pending",
@@ -14,5 +14,6 @@ export { usePerformanceTracker, useComponentProfiler, useNavigationProfiler, tra
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
16
  export { sendSessionTelemetryPing, trackTelemetryEvent, trackInspectorOpen, trackTabSwitch, trackLogExport, GA4_MEASUREMENT_ID, GA4_API_SECRET, } from './helpers';
17
+ export { runLivePackageAudit, logCodeQualityIssue, clearCustomAuditIssues, } from './helpers/packageAuditor';
17
18
  export { BrandSquareIcon, BrandCircleIcon, } from './components/NetworkIcons';
18
19
  export { ActiveTab, Method, StatusFilter, SortOrder, LocalFilter, ModalAnimationType, SettingsPage, SettingsSubTab, LogFilter, ConsoleLogType, AnalyticsEventSource, GAEventCategory, StackFrameType, DiffResultType, BundleSubTab, PerformanceSubTab, CrashType, CrashExportFormat, CrashDetailSubTab, CrashFilterType, BreadcrumbType, } from './types';
@@ -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.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.BrandCircleIcon = exports.BrandSquareIcon = exports.GA4_API_SECRET = exports.GA4_MEASUREMENT_ID = exports.trackLogExport = exports.trackTabSwitch = exports.trackInspectorOpen = exports.trackTelemetryEvent = exports.sendSessionTelemetryPing = 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 = void 0;
40
+ 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.BrandCircleIcon = exports.BrandSquareIcon = exports.clearCustomAuditIssues = exports.logCodeQualityIssue = exports.runLivePackageAudit = exports.GA4_API_SECRET = exports.GA4_MEASUREMENT_ID = exports.trackLogExport = exports.trackTabSwitch = exports.trackInspectorOpen = exports.trackTelemetryEvent = exports.sendSessionTelemetryPing = 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 = 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");
@@ -64,14 +64,22 @@ const analyticsLogger_1 = require("./customHooks/analyticsLogger");
64
64
  const reduxLogger_1 = require("./customHooks/reduxLogger");
65
65
  const performanceTracker_1 = require("./customHooks/performanceTracker");
66
66
  const bundleAnalyzer_1 = require("./customHooks/bundleAnalyzer");
67
+ const storageInspector_1 = require("./customHooks/storageInspector");
68
+ const deviceInfo_1 = require("./helpers/deviceInfo");
69
+ const packageAuditor_1 = require("./helpers/packageAuditor");
67
70
  const NativeInspector_2 = require("./native/NativeInspector");
68
71
  const constants_1 = require("./constants");
69
72
  // Stylesheet
70
73
  const styles_1 = require("./styles");
71
- const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigationRef, appIcon, environment, initialVisible, visible: controlledVisible, }) => {
74
+ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigationRef, appIcon, environment, initialVisible, visible: controlledVisible, initialTab, enablePerformanceHud = false, }) => {
75
+ // Zero-overhead production stub: if disabled, return null immediately
76
+ if (!enabled || !isEnabled) {
77
+ return null;
78
+ }
72
79
  // Set custom storage synchronously during render phase
73
80
  (0, settingsStore_1.setCustomStorage)(storage || null);
74
81
  const [isDark, setIsDark] = (0, react_1.useState)(false);
82
+ const [isPerformanceHudEnabled, setIsPerformanceHudEnabled] = (0, react_1.useState)(enablePerformanceHud);
75
83
  const [reduxState, setReduxState] = (0, react_1.useState)(null);
76
84
  // Per-reducer last action is kept in component state so the
77
85
  // Redux tab re-renders live on every dispatch, independent of the state tree ref.
@@ -86,10 +94,19 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
86
94
  setVisible(controlledVisible);
87
95
  }
88
96
  }, [controlledVisible]);
97
+ (0, react_1.useEffect)(() => {
98
+ if (enablePerformanceHud !== undefined) {
99
+ setIsPerformanceHudEnabled(enablePerformanceHud);
100
+ }
101
+ }, [enablePerformanceHud]);
89
102
  const [isReady, setIsReady] = (0, react_1.useState)(false);
90
103
  const [selected, setSelected] = (0, react_1.useState)(null);
91
104
  const [selectedLogs, setSelectedLogs] = (0, react_1.useState)(new Set());
92
105
  const [search, setSearch] = (0, react_1.useState)('');
106
+ const [searchScope, setSearchScope] = (0, react_1.useState)('all');
107
+ const [isRegexSearch, setIsRegexSearch] = (0, react_1.useState)(false);
108
+ const [isCaseSensitive, setIsCaseSensitive] = (0, react_1.useState)(false);
109
+ const [quickFilter, setQuickFilter] = (0, react_1.useState)('all');
93
110
  const [detailSearch, setDetailSearch] = (0, react_1.useState)('');
94
111
  const [reduxSearch, setReduxSearch] = (0, react_1.useState)('');
95
112
  const [selectedReduxSlice, setSelectedReduxSlice] = (0, react_1.useState)(null);
@@ -121,7 +138,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
121
138
  const [showReqDiff, setShowReqDiff] = (0, react_1.useState)(false);
122
139
  const [showResDiff, setShowResDiff] = (0, react_1.useState)(false);
123
140
  // ─── Analytics state ───────────────────────────────────────────────────────
124
- const [activeTab, setActiveTab] = (0, react_1.useState)('apis');
141
+ const [activeTab, setActiveTab] = (0, react_1.useState)(initialTab || 'apis');
125
142
  const [analyticsEvents, setAnalyticsEvents] = (0, react_1.useState)([]);
126
143
  // ─── Logs state ────────────────────────────────────────────────────────────
127
144
  const [consoleLogs, setConsoleLogs] = (0, react_1.useState)([]);
@@ -177,6 +194,47 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
177
194
  setLastReadCrashesCount(crashRecords.length);
178
195
  }
179
196
  }, [activeTab, crashRecords.length]);
197
+ // ─── Storage state ─────────────────────────────────────────────────────────
198
+ const [storageEntries, setStorageEntries] = (0, react_1.useState)([]);
199
+ const [selectedStorageKey, setSelectedStorageKey] = (0, react_1.useState)(null);
200
+ const refreshStorageEntries = (0, react_1.useCallback)(async () => {
201
+ try {
202
+ const entries = await (0, storageInspector_1.fetchAllStorageEntries)();
203
+ setStorageEntries(entries);
204
+ }
205
+ catch { }
206
+ }, []);
207
+ const updateStorageEntry = (0, react_1.useCallback)(async (key, value) => {
208
+ await (0, storageInspector_1.setStorageItem)(key, value);
209
+ await refreshStorageEntries();
210
+ }, [refreshStorageEntries]);
211
+ const deleteStorageEntry = (0, react_1.useCallback)(async (key) => {
212
+ await (0, storageInspector_1.removeStorageItem)(key);
213
+ await refreshStorageEntries();
214
+ }, [refreshStorageEntries]);
215
+ const clearAllStorageEntries = (0, react_1.useCallback)(async () => {
216
+ await (0, storageInspector_1.clearAllStorage)();
217
+ await refreshStorageEntries();
218
+ }, [refreshStorageEntries]);
219
+ (0, react_1.useEffect)(() => {
220
+ refreshStorageEntries();
221
+ const unsub = (0, storageInspector_1.subscribeStorageChanges)(refreshStorageEntries);
222
+ return () => unsub();
223
+ }, [refreshStorageEntries]);
224
+ // ─── Device info state ──────────────────────────────────────────────────────
225
+ const [deviceInfo] = (0, react_1.useState)(() => (0, deviceInfo_1.getSystemDiagnostics)());
226
+ // ─── Code Quality & Package Audit state ─────────────────────────────────────
227
+ const [auditReport, setAuditReport] = (0, react_1.useState)(() => (0, packageAuditor_1.runLivePackageAudit)());
228
+ (0, react_1.useEffect)(() => {
229
+ const unsub = (0, packageAuditor_1.subscribeAuditChanges)(setAuditReport);
230
+ return () => unsub();
231
+ }, []);
232
+ const refreshAuditReport = (0, react_1.useCallback)(() => {
233
+ setAuditReport((0, packageAuditor_1.runLivePackageAudit)());
234
+ }, []);
235
+ const logCustomAuditIssue = (0, react_1.useCallback)((issue) => {
236
+ (0, packageAuditor_1.logCodeQualityIssue)(issue);
237
+ }, []);
180
238
  const [maxConsoleLogs, setMaxConsoleLogs] = (0, react_1.useState)(100);
181
239
  const [showConsoleLevels, setShowConsoleLevels] = (0, react_1.useState)({
182
240
  info: true,
@@ -217,6 +275,9 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
217
275
  logs: true,
218
276
  analytics: false,
219
277
  redux: false,
278
+ storage: false,
279
+ device: false,
280
+ audit: false,
220
281
  bundle: false,
221
282
  performance: false,
222
283
  crash: false,
@@ -271,6 +332,9 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
271
332
  logs: true,
272
333
  analytics: false,
273
334
  redux: false,
335
+ storage: false,
336
+ device: false,
337
+ audit: false,
274
338
  bundle: false,
275
339
  performance: false,
276
340
  crash: false,
@@ -308,14 +372,24 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
308
372
  setModalHeightPercent(saved.modalHeightPercent);
309
373
  if (saved.modalAnimationType)
310
374
  setModalAnimationType(saved.modalAnimationType);
311
- if (saved.tabVisibility)
375
+ if (saved.tabVisibility) {
376
+ const savedVis = saved.tabVisibility;
312
377
  setTabVisibility(prev => ({
313
378
  ...prev,
314
- ...saved.tabVisibility,
379
+ ...savedVis,
380
+ storage: savedVis.storage ?? false,
381
+ device: savedVis.device ?? false,
382
+ audit: savedVis.audit ?? false,
315
383
  apis: true, // APIs is always required
316
384
  }));
317
- if (saved.defaultTab)
385
+ }
386
+ if (initialTab) {
387
+ setActiveTab(initialTab);
388
+ }
389
+ else if (saved.defaultTab) {
318
390
  setDefaultTab(saved.defaultTab);
391
+ setActiveTab(saved.defaultTab);
392
+ }
319
393
  if (saved.isAutoRamLimitEnabled != null)
320
394
  setIsAutoRamLimitEnabled(saved.isAutoRamLimitEnabled);
321
395
  if (saved.maxNetworkLogs != null)
@@ -336,7 +410,10 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
336
410
  setShowDuplicateLogs(saved.showDuplicateLogs);
337
411
  if (saved.showUpdateToast != null)
338
412
  setShowUpdateToast(saved.showUpdateToast);
339
- if (saved.defaultTab) {
413
+ if (initialTab) {
414
+ setActiveTab(initialTab);
415
+ }
416
+ else if (saved.defaultTab) {
340
417
  const dt = saved.defaultTab;
341
418
  const vis = {
342
419
  ...{
@@ -344,6 +421,9 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
344
421
  logs: true,
345
422
  analytics: false,
346
423
  redux: false,
424
+ storage: false,
425
+ device: false,
426
+ audit: false,
347
427
  bundle: false,
348
428
  performance: false,
349
429
  crash: false,
@@ -812,6 +892,12 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
812
892
  ? defaultTab
813
893
  : 'apis';
814
894
  setActiveTab(target);
895
+ setSelected(null);
896
+ setSelectedEvent(null);
897
+ setSelectedLog(null);
898
+ setSelectedReduxSlice(null);
899
+ setSelectedReduxAction(null);
900
+ setSelectedCrash(null);
815
901
  // Track inspector opened event in GA4
816
902
  (0, helpers_1.trackInspectorOpen)({ activeTab: target });
817
903
  // Instant synchronization of data collected while modal was closed
@@ -1041,7 +1127,40 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1041
1127
  }, [selected]);
1042
1128
  const filteredLogs = (0, react_1.useMemo)(() => {
1043
1129
  let result = logs.filter(log => {
1044
- // Status Filter Check
1130
+ // 1. Quick Filter Check (All, Errors, Success, Slow, GET, POST, GraphQL)
1131
+ if (quickFilter && quickFilter !== 'all') {
1132
+ if (quickFilter === 'errors') {
1133
+ const isErr = log.status === 0 ||
1134
+ log.status == null ||
1135
+ (typeof log.status === 'number' && log.status >= 400);
1136
+ if (!isErr)
1137
+ return false;
1138
+ }
1139
+ else if (quickFilter === 'success') {
1140
+ const isSuccess = typeof log.status === 'number' &&
1141
+ log.status >= 200 &&
1142
+ log.status < 400;
1143
+ if (!isSuccess)
1144
+ return false;
1145
+ }
1146
+ else if (quickFilter === 'slow') {
1147
+ if ((log.duration || 0) < 500)
1148
+ return false;
1149
+ }
1150
+ else if (quickFilter === 'graphql') {
1151
+ const isGql = (log.url || '').toLowerCase().includes('graphql') ||
1152
+ (log.client || '').toLowerCase().includes('graphql') ||
1153
+ (log.client || '').toLowerCase().includes('apollo');
1154
+ if (!isGql)
1155
+ return false;
1156
+ }
1157
+ else {
1158
+ if (log.method?.toUpperCase() !== quickFilter.toUpperCase()) {
1159
+ return false;
1160
+ }
1161
+ }
1162
+ }
1163
+ // 2. Status Filter Check (from filters accordion dropdown)
1045
1164
  if (statusFilters.size > 0) {
1046
1165
  const matched = [...statusFilters].some(f => {
1047
1166
  if (f === 'ALL')
@@ -1057,7 +1176,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1057
1176
  if (!matched)
1058
1177
  return false;
1059
1178
  }
1060
- // Method Filter Check
1179
+ // 3. Method Filter Check (from filters accordion dropdown)
1061
1180
  if (methodFilters.size > 0) {
1062
1181
  const matchedMethod = [...methodFilters].some(m => {
1063
1182
  if (m === 'ALL')
@@ -1067,10 +1186,14 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1067
1186
  if (!matchedMethod)
1068
1187
  return false;
1069
1188
  }
1070
- // Advanced Search Query Engine Check (Supports method:POST, is:error, slow:>1s, status:200, headers, body, etc.)
1189
+ // 4. Advanced Search Query Engine Check with Scope, Regex and Case-Sensitivity
1071
1190
  if (search && search.trim().length > 0) {
1072
1191
  const routePath = logRouteMapRef.current.get(log.id)?.path || '';
1073
- const isMatch = (0, helpers_1.matchNetworkLogQuery)(log, search, routePath);
1192
+ const isMatch = (0, helpers_1.matchNetworkLogQuery)(log, search, routePath, {
1193
+ scope: searchScope,
1194
+ isRegex: isRegexSearch,
1195
+ isCaseSensitive: isCaseSensitive,
1196
+ });
1074
1197
  if (!isMatch)
1075
1198
  return false;
1076
1199
  }
@@ -1079,9 +1202,7 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1079
1202
  if (sortOrder === 'oldest') {
1080
1203
  result = [...result].reverse();
1081
1204
  }
1082
- // #9 — collapse consecutive identical requests (same method + url +
1083
- // status) into one row carrying a ×N counter, unless the user opted in
1084
- // to seeing every duplicate via Settings → "Show Duplicate Logs".
1205
+ // #9 — collapse consecutive identical requests
1085
1206
  if (!showDuplicateLogs) {
1086
1207
  const collapsed = [];
1087
1208
  for (const log of result) {
@@ -1105,6 +1226,10 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1105
1226
  }, [
1106
1227
  logs,
1107
1228
  search,
1229
+ searchScope,
1230
+ isRegexSearch,
1231
+ isCaseSensitive,
1232
+ quickFilter,
1108
1233
  statusFilters,
1109
1234
  methodFilters,
1110
1235
  sortOrder,
@@ -1655,6 +1780,14 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1655
1780
  groupedData,
1656
1781
  search,
1657
1782
  setSearch,
1783
+ searchScope,
1784
+ setSearchScope,
1785
+ isRegexSearch,
1786
+ setIsRegexSearch,
1787
+ isCaseSensitive,
1788
+ setIsCaseSensitive,
1789
+ quickFilter,
1790
+ setQuickFilter,
1658
1791
  statusFilters,
1659
1792
  setStatusFilters,
1660
1793
  methodFilters,
@@ -1744,6 +1877,20 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1744
1877
  setCrashRecords([]);
1745
1878
  setSelectedCrash(null);
1746
1879
  },
1880
+ // ─── Storage ─────────────────────────────────────────────────────────
1881
+ storageEntries,
1882
+ refreshStorageEntries,
1883
+ updateStorageEntry,
1884
+ deleteStorageEntry,
1885
+ clearAllStorageEntries,
1886
+ selectedStorageKey,
1887
+ setSelectedStorageKey,
1888
+ // ─── Device ──────────────────────────────────────────────────────────
1889
+ deviceInfo,
1890
+ // ─── Audit / Code Quality ─────────────────────────────────────────────
1891
+ auditReport,
1892
+ refreshAuditReport,
1893
+ logCustomAuditIssue,
1747
1894
  // ─── Settings ───────────────────────────────────────────────────────
1748
1895
  settingsActiveSubTab,
1749
1896
  setSettingsActiveSubTab,
@@ -1768,13 +1915,17 @@ const NetworkInspector = ({ enabled = true, isEnabled = true, storage, navigatio
1768
1915
  isAutoRamLimitEnabled,
1769
1916
  setIsAutoRamLimitEnabled,
1770
1917
  deviceFreeRamMb,
1918
+ isPerformanceHudEnabled,
1919
+ setIsPerformanceHudEnabled,
1771
1920
  reduxAutoRefresh,
1772
1921
  setReduxAutoRefreshState,
1773
1922
  reduxExpandDepth,
1774
1923
  setReduxExpandDepth,
1775
1924
  };
1776
1925
  return (<InspectorContext_1.InspectorContext.Provider value={contextValue}>
1777
- <MainScreen_1.default />
1926
+ <react_native_1.View style={react_native_1.StyleSheet.absoluteFill} pointerEvents="box-none">
1927
+ <MainScreen_1.default />
1928
+ </react_native_1.View>
1778
1929
  </InspectorContext_1.InspectorContext.Provider>);
1779
1930
  };
1780
1931
  const NetworkInspectorWrapper = (props) => {
@@ -1886,6 +2037,10 @@ Object.defineProperty(exports, "trackTabSwitch", { enumerable: true, get: functi
1886
2037
  Object.defineProperty(exports, "trackLogExport", { enumerable: true, get: function () { return helpers_2.trackLogExport; } });
1887
2038
  Object.defineProperty(exports, "GA4_MEASUREMENT_ID", { enumerable: true, get: function () { return helpers_2.GA4_MEASUREMENT_ID; } });
1888
2039
  Object.defineProperty(exports, "GA4_API_SECRET", { enumerable: true, get: function () { return helpers_2.GA4_API_SECRET; } });
2040
+ var packageAuditor_2 = require("./helpers/packageAuditor");
2041
+ Object.defineProperty(exports, "runLivePackageAudit", { enumerable: true, get: function () { return packageAuditor_2.runLivePackageAudit; } });
2042
+ Object.defineProperty(exports, "logCodeQualityIssue", { enumerable: true, get: function () { return packageAuditor_2.logCodeQualityIssue; } });
2043
+ Object.defineProperty(exports, "clearCustomAuditIssues", { enumerable: true, get: function () { return packageAuditor_2.clearCustomAuditIssues; } });
1889
2044
  var NetworkIcons_1 = require("./components/NetworkIcons");
1890
2045
  Object.defineProperty(exports, "BrandSquareIcon", { enumerable: true, get: function () { return NetworkIcons_1.BrandSquareIcon; } });
1891
2046
  Object.defineProperty(exports, "BrandCircleIcon", { enumerable: true, get: function () { return NetworkIcons_1.BrandCircleIcon; } });
@@ -14,6 +14,7 @@ export interface NativeDeviceMetrics {
14
14
  isCharging?: boolean;
15
15
  deviceModel?: string;
16
16
  deviceBrand?: string;
17
+ deviceId?: string;
17
18
  osVersion?: string;
18
19
  apiLevel?: number;
19
20
  cpuAbi?: string;
@@ -3,6 +3,9 @@ export declare const ActiveTab: {
3
3
  readonly Analytics: "analytics";
4
4
  readonly Logs: "logs";
5
5
  readonly Redux: "redux";
6
+ readonly Storage: "storage";
7
+ readonly Device: "device";
8
+ readonly Audit: "audit";
6
9
  readonly Bundle: "bundle";
7
10
  readonly Performance: "performance";
8
11
  readonly Crash: "crash";
@@ -49,6 +52,9 @@ export declare const SettingsPage: {
49
52
  readonly Logs: "logs";
50
53
  readonly Analytics: "analytics";
51
54
  readonly Redux: "redux";
55
+ readonly Storage: "storage";
56
+ readonly Device: "device";
57
+ readonly Audit: "audit";
52
58
  readonly Bundle: "bundle";
53
59
  readonly Performance: "performance";
54
60
  readonly Crash: "crash";
@@ -56,6 +62,7 @@ export declare const SettingsPage: {
56
62
  export type SettingsPage = (typeof SettingsPage)[keyof typeof SettingsPage] | null;
57
63
  export declare const SettingsSubTab: {
58
64
  readonly Module: "module";
65
+ readonly Limits: "limits";
59
66
  readonly Ui: "ui";
60
67
  };
61
68
  export type SettingsSubTab = (typeof SettingsSubTab)[keyof typeof SettingsSubTab];
@@ -9,6 +9,9 @@ exports.ActiveTab = {
9
9
  Analytics: 'analytics',
10
10
  Logs: 'logs',
11
11
  Redux: 'redux',
12
+ Storage: 'storage',
13
+ Device: 'device',
14
+ Audit: 'audit',
12
15
  Bundle: 'bundle',
13
16
  Performance: 'performance',
14
17
  Crash: 'crash',
@@ -49,12 +52,16 @@ exports.SettingsPage = {
49
52
  Logs: 'logs',
50
53
  Analytics: 'analytics',
51
54
  Redux: 'redux',
55
+ Storage: 'storage',
56
+ Device: 'device',
57
+ Audit: 'audit',
52
58
  Bundle: 'bundle',
53
59
  Performance: 'performance',
54
60
  Crash: 'crash',
55
61
  };
56
62
  exports.SettingsSubTab = {
57
63
  Module: 'module',
64
+ Limits: 'limits',
58
65
  Ui: 'ui',
59
66
  };
60
67
  exports.LogFilter = {