react-native-inapp-inspector 2.3.14 → 2.3.16
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 +1 -0
- package/dist/commonjs/components/AnimatedEntrance.js +3 -3
- package/dist/commonjs/components/ConsoleLogCard.js +174 -100
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +0 -22
- package/dist/commonjs/components/Inspector/ConsoleTab.js +25 -38
- package/dist/commonjs/components/Inspector/CrashTab.js +19 -28
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +198 -98
- package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/FeedbackModal.js +552 -0
- package/dist/commonjs/components/Inspector/InspectorHeader.js +58 -6
- package/dist/commonjs/components/Inspector/MainScreen.js +100 -58
- package/dist/commonjs/components/Inspector/NetworkTab.js +26 -371
- package/dist/commonjs/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +494 -0
- package/dist/commonjs/components/Inspector/PerformanceTab.js +40 -7
- package/dist/commonjs/components/Inspector/ReduxTab.js +3 -23
- package/dist/commonjs/components/Inspector/SettingsPanel.js +1035 -173
- package/dist/commonjs/components/Inspector/StorageTab.js +23 -28
- package/dist/commonjs/components/Inspector/TabBar.js +50 -15
- package/dist/commonjs/components/JsonViewer.js +14 -2
- package/dist/commonjs/components/LogCard.js +428 -227
- package/dist/commonjs/components/NetworkIcons.d.ts +5 -0
- package/dist/commonjs/components/NetworkIcons.js +33 -2
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/analyticsLogger.js +1 -1
- package/dist/commonjs/customHooks/consoleLogger.js +34 -2
- package/dist/commonjs/customHooks/crashHandler.js +1 -1
- package/dist/commonjs/customHooks/networkLogger.js +184 -26
- package/dist/commonjs/helpers/index.d.ts +1 -0
- package/dist/commonjs/helpers/index.js +1 -0
- package/dist/commonjs/helpers/remoteConfig.d.ts +4 -0
- package/dist/commonjs/helpers/remoteConfig.js +165 -0
- package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
- package/dist/commonjs/helpers/searchQueryParser.js +39 -291
- package/dist/commonjs/helpers/telemetry.d.ts +5 -0
- package/dist/commonjs/helpers/telemetry.js +339 -8
- package/dist/commonjs/index.d.ts +1 -0
- package/dist/commonjs/index.js +173 -29
- package/dist/commonjs/styles/AppFonts.d.ts +2 -0
- package/dist/commonjs/styles/AppFonts.js +1 -0
- package/dist/commonjs/styles/index.d.ts +22 -0
- package/dist/commonjs/styles/index.js +19 -0
- package/dist/commonjs/types/enums.d.ts +1 -0
- package/dist/commonjs/types/enums.js +1 -0
- package/dist/commonjs/types/interfaces.d.ts +12 -0
- package/dist/esm/components/AnimatedEntrance.js +3 -3
- package/dist/esm/components/ConsoleLogCard.js +141 -100
- package/dist/esm/components/Inspector/AnalyticsTab.js +1 -23
- package/dist/esm/components/Inspector/ConsoleTab.js +26 -39
- package/dist/esm/components/Inspector/CrashTab.js +20 -29
- package/dist/esm/components/Inspector/DeviceInfoTab.js +198 -98
- package/dist/esm/components/Inspector/FeedbackModal.d.ts +7 -0
- package/dist/esm/components/Inspector/FeedbackModal.js +515 -0
- package/dist/esm/components/Inspector/InspectorHeader.js +60 -8
- package/dist/esm/components/Inspector/MainScreen.js +101 -59
- package/dist/esm/components/Inspector/NetworkTab.js +27 -372
- package/dist/esm/components/Inspector/NpmStarPrompt.d.ts +3 -0
- package/dist/esm/components/Inspector/NpmStarPrompt.js +454 -0
- package/dist/esm/components/Inspector/PerformanceTab.js +40 -7
- package/dist/esm/components/Inspector/ReduxTab.js +4 -24
- package/dist/esm/components/Inspector/SettingsPanel.js +1038 -176
- package/dist/esm/components/Inspector/StorageTab.js +23 -28
- package/dist/esm/components/Inspector/TabBar.js +50 -15
- package/dist/esm/components/JsonViewer.js +14 -2
- package/dist/esm/components/LogCard.js +422 -221
- package/dist/esm/components/NetworkIcons.d.ts +5 -0
- package/dist/esm/components/NetworkIcons.js +26 -0
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/analyticsLogger.js +1 -1
- package/dist/esm/customHooks/consoleLogger.js +34 -2
- package/dist/esm/customHooks/crashHandler.js +1 -1
- package/dist/esm/customHooks/networkLogger.js +184 -26
- package/dist/esm/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.js +1 -0
- package/dist/esm/helpers/remoteConfig.d.ts +4 -0
- package/dist/esm/helpers/remoteConfig.js +160 -0
- package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
- package/dist/esm/helpers/searchQueryParser.js +39 -291
- package/dist/esm/helpers/telemetry.d.ts +5 -0
- package/dist/esm/helpers/telemetry.js +332 -9
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +171 -29
- package/dist/esm/styles/AppFonts.d.ts +2 -0
- package/dist/esm/styles/AppFonts.js +1 -0
- package/dist/esm/styles/index.d.ts +22 -0
- package/dist/esm/styles/index.js +19 -0
- package/dist/esm/types/enums.d.ts +1 -0
- package/dist/esm/types/enums.js +1 -0
- package/dist/esm/types/interfaces.d.ts +12 -0
- package/package.json +1 -1
- package/src/components/AnimatedEntrance.tsx +3 -3
- package/src/components/ConsoleLogCard.tsx +154 -103
- package/src/components/Inspector/AnalyticsTab.tsx +0 -23
- package/src/components/Inspector/ConsoleTab.tsx +27 -41
- package/src/components/Inspector/CrashTab.tsx +19 -28
- package/src/components/Inspector/DeviceInfoTab.tsx +224 -102
- package/src/components/Inspector/FeedbackModal.tsx +626 -0
- package/src/components/Inspector/InspectorHeader.tsx +83 -5
- package/src/components/Inspector/MainScreen.tsx +61 -6
- package/src/components/Inspector/NetworkTab.tsx +70 -480
- package/src/components/Inspector/NpmStarPrompt.tsx +532 -0
- package/src/components/Inspector/PerformanceTab.tsx +44 -8
- package/src/components/Inspector/ReduxTab.tsx +9 -24
- package/src/components/Inspector/SettingsPanel.tsx +1162 -197
- package/src/components/Inspector/StorageTab.tsx +27 -30
- package/src/components/Inspector/TabBar.tsx +57 -20
- package/src/components/JsonViewer.tsx +15 -2
- package/src/components/LogCard.tsx +528 -339
- package/src/components/NetworkIcons.tsx +92 -0
- package/src/constants/version.ts +1 -1
- package/src/customHooks/analyticsLogger.ts +1 -1
- package/src/customHooks/consoleLogger.ts +36 -3
- package/src/customHooks/crashHandler.ts +1 -1
- package/src/customHooks/networkLogger.ts +214 -26
- package/src/helpers/index.ts +1 -0
- package/src/helpers/remoteConfig.ts +212 -0
- package/src/helpers/searchQueryParser.ts +42 -284
- package/src/helpers/telemetry.ts +381 -10
- package/src/index.tsx +374 -211
- package/src/styles/AppFonts.ts +2 -0
- package/src/styles/index.ts +20 -1
- package/src/types/enums.ts +1 -0
- package/src/types/interfaces.ts +12 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getFirebaseRemoteConfig = getFirebaseRemoteConfig;
|
|
4
|
+
exports.isFirebaseRemoteConfigAvailable = isFirebaseRemoteConfigAvailable;
|
|
5
|
+
exports.fetchRemoteConfigModuleStatus = fetchRemoteConfigModuleStatus;
|
|
6
|
+
const MODULE_KEYS = [
|
|
7
|
+
'apis',
|
|
8
|
+
'logs',
|
|
9
|
+
'analytics',
|
|
10
|
+
'redux',
|
|
11
|
+
'storage',
|
|
12
|
+
'device',
|
|
13
|
+
'crash',
|
|
14
|
+
'bundle',
|
|
15
|
+
'performance',
|
|
16
|
+
'debugging',
|
|
17
|
+
];
|
|
18
|
+
let cachedRemoteConfigInstance = null;
|
|
19
|
+
function getFirebaseRemoteConfig(customInstance) {
|
|
20
|
+
if (customInstance && typeof customInstance === 'object') {
|
|
21
|
+
cachedRemoteConfigInstance = customInstance;
|
|
22
|
+
return customInstance;
|
|
23
|
+
}
|
|
24
|
+
if (cachedRemoteConfigInstance) {
|
|
25
|
+
return cachedRemoteConfigInstance;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const rcModule = require('@react-native-firebase/remote-config');
|
|
29
|
+
const instance = typeof rcModule.default === 'function'
|
|
30
|
+
? rcModule.default()
|
|
31
|
+
: typeof rcModule === 'function'
|
|
32
|
+
? rcModule()
|
|
33
|
+
: rcModule;
|
|
34
|
+
cachedRemoteConfigInstance = instance;
|
|
35
|
+
return instance;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function isFirebaseRemoteConfigAvailable(customInstance) {
|
|
42
|
+
return Boolean(getFirebaseRemoteConfig(customInstance));
|
|
43
|
+
}
|
|
44
|
+
function extractValue(val) {
|
|
45
|
+
if (val === null || val === undefined)
|
|
46
|
+
return undefined;
|
|
47
|
+
if (typeof val === 'boolean')
|
|
48
|
+
return val;
|
|
49
|
+
if (typeof val === 'number')
|
|
50
|
+
return val !== 0;
|
|
51
|
+
if (typeof val === 'string') {
|
|
52
|
+
const lower = val.trim().toLowerCase();
|
|
53
|
+
if (lower === 'true' || lower === '1' || lower === 'enabled' || lower === 'on')
|
|
54
|
+
return true;
|
|
55
|
+
if (lower === 'false' || lower === '0' || lower === 'disabled' || lower === 'off')
|
|
56
|
+
return false;
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(val);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (typeof val.asBoolean === 'function') {
|
|
65
|
+
return val.asBoolean();
|
|
66
|
+
}
|
|
67
|
+
if (typeof val.asString === 'function') {
|
|
68
|
+
const str = val.asString();
|
|
69
|
+
const lower = str.trim().toLowerCase();
|
|
70
|
+
if (lower === 'true' || lower === '1' || lower === 'enabled' || lower === 'on')
|
|
71
|
+
return true;
|
|
72
|
+
if (lower === 'false' || lower === '0' || lower === 'disabled' || lower === 'off')
|
|
73
|
+
return false;
|
|
74
|
+
try {
|
|
75
|
+
return JSON.parse(str);
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
async function fetchRemoteConfigModuleStatus(customInstance, fetchTimeoutMs = 8000) {
|
|
84
|
+
const rc = getFirebaseRemoteConfig(customInstance);
|
|
85
|
+
if (!rc) {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
const fetchPromise = (async () => {
|
|
90
|
+
if (typeof rc.fetchAndActivate === 'function') {
|
|
91
|
+
await rc.fetchAndActivate();
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
if (typeof rc.fetch === 'function') {
|
|
95
|
+
await rc.fetch();
|
|
96
|
+
}
|
|
97
|
+
if (typeof rc.activate === 'function') {
|
|
98
|
+
await rc.activate();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
})();
|
|
102
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Remote Config fetch timeout')), fetchTimeoutMs));
|
|
103
|
+
await Promise.race([fetchPromise, timeoutPromise]).catch(() => {
|
|
104
|
+
});
|
|
105
|
+
const result = {};
|
|
106
|
+
const jsonKeys = [
|
|
107
|
+
'inspector_modules',
|
|
108
|
+
'inapp_inspector_modules',
|
|
109
|
+
'react_native_inapp_inspector_modules',
|
|
110
|
+
];
|
|
111
|
+
for (const jKey of jsonKeys) {
|
|
112
|
+
let rawVal;
|
|
113
|
+
if (typeof rc.getValue === 'function') {
|
|
114
|
+
try {
|
|
115
|
+
rawVal = rc.getValue(jKey);
|
|
116
|
+
}
|
|
117
|
+
catch { }
|
|
118
|
+
}
|
|
119
|
+
else if (rc[jKey] !== undefined) {
|
|
120
|
+
rawVal = rc[jKey];
|
|
121
|
+
}
|
|
122
|
+
const parsed = extractValue(rawVal);
|
|
123
|
+
if (parsed && typeof parsed === 'object') {
|
|
124
|
+
for (const modKey of MODULE_KEYS) {
|
|
125
|
+
if (typeof parsed[modKey] === 'boolean') {
|
|
126
|
+
result[modKey] = parsed[modKey];
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
for (const modKey of MODULE_KEYS) {
|
|
132
|
+
const paramKeys = [
|
|
133
|
+
`inspector_module_${modKey}`,
|
|
134
|
+
`inapp_inspector_${modKey}`,
|
|
135
|
+
`inspector_${modKey}`,
|
|
136
|
+
`inapp_inspector_module_${modKey}`,
|
|
137
|
+
`rn_inspector_${modKey}`,
|
|
138
|
+
];
|
|
139
|
+
for (const pKey of paramKeys) {
|
|
140
|
+
let rawVal;
|
|
141
|
+
if (typeof rc.getValue === 'function') {
|
|
142
|
+
try {
|
|
143
|
+
rawVal = rc.getValue(pKey);
|
|
144
|
+
}
|
|
145
|
+
catch { }
|
|
146
|
+
}
|
|
147
|
+
else if (rc[pKey] !== undefined) {
|
|
148
|
+
rawVal = rc[pKey];
|
|
149
|
+
}
|
|
150
|
+
const boolVal = extractValue(rawVal);
|
|
151
|
+
if (typeof boolVal === 'boolean') {
|
|
152
|
+
result[modKey] = boolVal;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (result.apis === undefined) {
|
|
158
|
+
result.apis = true;
|
|
159
|
+
}
|
|
160
|
+
return Object.keys(result).length > 0 ? result : null;
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
@@ -4,4 +4,4 @@ export interface SearchQueryOptions {
|
|
|
4
4
|
isRegex?: boolean;
|
|
5
5
|
isCaseSensitive?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare function matchNetworkLogQuery(log: NetworkLog, searchQuery: string, routePath?: string,
|
|
7
|
+
export declare function matchNetworkLogQuery(log: NetworkLog, searchQuery: string, routePath?: string, _options?: SearchQueryOptions): boolean;
|
|
@@ -1,314 +1,62 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.matchNetworkLogQuery = matchNetworkLogQuery;
|
|
4
|
-
|
|
4
|
+
const telemetry_1 = require("./telemetry");
|
|
5
|
+
function matchNetworkLogQuery(log, searchQuery, routePath, _options) {
|
|
5
6
|
if (!searchQuery || searchQuery.trim().length === 0)
|
|
6
7
|
return true;
|
|
7
|
-
|
|
8
|
+
(0, telemetry_1.markSearchFilterUsed)();
|
|
9
|
+
const rawTokens = searchQuery.trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
8
10
|
if (rawTokens.length === 0)
|
|
9
11
|
return true;
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const methodRaw = log.method || '';
|
|
14
|
-
const urlRaw = log.url || '';
|
|
12
|
+
const methodRaw = (log.method || '').toLowerCase();
|
|
13
|
+
const urlRaw = (log.url || '').toLowerCase();
|
|
14
|
+
const statusStr = log.status != null ? String(log.status).toLowerCase() : 'pending';
|
|
15
15
|
const statusNum = typeof log.status === 'number'
|
|
16
16
|
? log.status
|
|
17
17
|
: log.status != null
|
|
18
18
|
? parseInt(String(log.status), 10)
|
|
19
19
|
: null;
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const callerRaw = log.caller || '';
|
|
20
|
+
const clientRaw = (log.client || '').toLowerCase();
|
|
21
|
+
const callerRaw = (log.caller || '').toLowerCase();
|
|
22
|
+
const pathRaw = (routePath || log?.routeInfo?.path || '').toLowerCase();
|
|
24
23
|
const reqRaw = typeof log.request === 'string'
|
|
25
|
-
? log.request
|
|
24
|
+
? log.request.toLowerCase()
|
|
26
25
|
: log.request != null
|
|
27
|
-
? JSON.stringify(log.request)
|
|
26
|
+
? JSON.stringify(log.request).toLowerCase()
|
|
28
27
|
: '';
|
|
29
28
|
const resRaw = typeof log.response === 'string'
|
|
30
|
-
? log.response
|
|
29
|
+
? log.response.toLowerCase()
|
|
31
30
|
: log.response != null
|
|
32
|
-
? JSON.stringify(log.response)
|
|
31
|
+
? JSON.stringify(log.response).toLowerCase()
|
|
33
32
|
: '';
|
|
34
33
|
const reqHeadersRaw = log.requestHeaders
|
|
35
|
-
? JSON.stringify(log.requestHeaders)
|
|
34
|
+
? JSON.stringify(log.requestHeaders).toLowerCase()
|
|
36
35
|
: '';
|
|
37
36
|
const resHeadersRaw = log.responseHeaders
|
|
38
|
-
? JSON.stringify(log.responseHeaders)
|
|
37
|
+
? JSON.stringify(log.responseHeaders).toLowerCase()
|
|
39
38
|
: '';
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
reqRaw,
|
|
64
|
-
resRaw,
|
|
65
|
-
reqHeadersRaw,
|
|
66
|
-
resHeadersRaw,
|
|
67
|
-
];
|
|
68
|
-
}
|
|
69
|
-
const combined = parts.join(' ');
|
|
70
|
-
return caseSens ? combined : combined.toLowerCase();
|
|
71
|
-
};
|
|
72
|
-
const targetCorpus = getScopedCorpus(isCaseSensitive);
|
|
73
|
-
const methodStr = methodRaw.toLowerCase();
|
|
74
|
-
const urlStr = urlRaw.toLowerCase();
|
|
75
|
-
const clientStr = clientRaw.toLowerCase();
|
|
76
|
-
const callerStr = callerRaw.toLowerCase();
|
|
77
|
-
const reqStr = reqRaw.toLowerCase();
|
|
78
|
-
const resStr = resRaw.toLowerCase();
|
|
79
|
-
const reqHeadersStr = reqHeadersRaw.toLowerCase();
|
|
80
|
-
const resHeadersStr = resHeadersRaw.toLowerCase();
|
|
81
|
-
const pathStr = pathRaw.toLowerCase();
|
|
82
|
-
for (const rawToken of rawTokens) {
|
|
83
|
-
const token = rawToken.replace(/^["']|["']$/g, '').trim();
|
|
84
|
-
if (!token)
|
|
85
|
-
continue;
|
|
86
|
-
const lowerToken = token.toLowerCase();
|
|
87
|
-
if (lowerToken.startsWith('method:') || lowerToken.startsWith('m:')) {
|
|
88
|
-
const targetMethod = lowerToken.replace(/^(method:|m:)/, '').trim();
|
|
89
|
-
if (targetMethod.startsWith('!')) {
|
|
90
|
-
if (methodStr === targetMethod.slice(1))
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
if (methodStr !== targetMethod)
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
if (lowerToken.startsWith('status:') || lowerToken.startsWith('s:')) {
|
|
100
|
-
const val = lowerToken.replace(/^(status:|s:)/, '').trim();
|
|
101
|
-
if (val === 'pending' || val === 'loading') {
|
|
102
|
-
if (log.status != null)
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
else if (val.startsWith('>=')) {
|
|
106
|
-
const threshold = parseInt(val.slice(2), 10);
|
|
107
|
-
if (isNaN(threshold) || statusNum === null || statusNum < threshold)
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
else if (val.startsWith('>')) {
|
|
111
|
-
const threshold = parseInt(val.slice(1), 10);
|
|
112
|
-
if (isNaN(threshold) || statusNum === null || statusNum <= threshold)
|
|
113
|
-
return false;
|
|
114
|
-
}
|
|
115
|
-
else if (val.startsWith('<=')) {
|
|
116
|
-
const threshold = parseInt(val.slice(2), 10);
|
|
117
|
-
if (isNaN(threshold) || statusNum === null || statusNum > threshold)
|
|
118
|
-
return false;
|
|
119
|
-
}
|
|
120
|
-
else if (val.startsWith('<')) {
|
|
121
|
-
const threshold = parseInt(val.slice(1), 10);
|
|
122
|
-
if (isNaN(threshold) || statusNum === null || statusNum >= threshold)
|
|
123
|
-
return false;
|
|
124
|
-
}
|
|
125
|
-
else if (val.endsWith('xx') || val.endsWith('x')) {
|
|
126
|
-
const prefix = val.replace(/x/g, '');
|
|
127
|
-
if (!statusStr.startsWith(prefix))
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
const targetCode = parseInt(val, 10);
|
|
132
|
-
if (!isNaN(targetCode)) {
|
|
133
|
-
if (statusNum !== targetCode)
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
else if (!statusStr.includes(val)) {
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
continue;
|
|
141
|
-
}
|
|
142
|
-
if (lowerToken.startsWith('is:')) {
|
|
143
|
-
const flag = lowerToken.slice(3).trim();
|
|
144
|
-
if (flag === 'error' ||
|
|
145
|
-
flag === 'failed' ||
|
|
146
|
-
flag === 'err' ||
|
|
147
|
-
flag === 'fail') {
|
|
148
|
-
const isErr = log.status === 0 || (statusNum !== null && statusNum >= 400);
|
|
149
|
-
if (!isErr)
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
|
-
else if (flag === 'success' || flag === 'ok' || flag === '2xx') {
|
|
153
|
-
const isSuccess = statusNum !== null && statusNum >= 200 && statusNum < 300;
|
|
154
|
-
if (!isSuccess)
|
|
155
|
-
return false;
|
|
156
|
-
}
|
|
157
|
-
else if (flag === 'pending' || flag === 'loading') {
|
|
158
|
-
if (log.status != null)
|
|
159
|
-
return false;
|
|
160
|
-
}
|
|
161
|
-
else if (flag === 'slow') {
|
|
162
|
-
if (durationNum < 1000)
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
else if (flag === 'fast') {
|
|
166
|
-
if (durationNum >= 200)
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
else if (flag === 'graphql' || flag === 'gql') {
|
|
170
|
-
const isGql = urlStr.includes('graphql') ||
|
|
171
|
-
clientStr === 'graphql' ||
|
|
172
|
-
clientStr === 'apollo';
|
|
173
|
-
if (!isGql)
|
|
174
|
-
return false;
|
|
175
|
-
}
|
|
176
|
-
else if (flag === 'https') {
|
|
177
|
-
if (!urlStr.startsWith('https'))
|
|
178
|
-
return false;
|
|
179
|
-
}
|
|
180
|
-
else if (flag === 'http') {
|
|
181
|
-
if (urlStr.startsWith('https') || !urlStr.startsWith('http'))
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
else if (flag === 'json') {
|
|
185
|
-
const isJson = reqHeadersStr.includes('application/json') ||
|
|
186
|
-
resHeadersStr.includes('application/json') ||
|
|
187
|
-
urlStr.includes('.json');
|
|
188
|
-
if (!isJson)
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
else if (flag === 'image') {
|
|
192
|
-
const isImg = resHeadersStr.includes('image/') ||
|
|
193
|
-
/\.(png|jpe?g|gif|webp|svg)/i.test(urlStr);
|
|
194
|
-
if (!isImg)
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
if (lowerToken.startsWith('slow:') ||
|
|
200
|
-
lowerToken.startsWith('dur:') ||
|
|
201
|
-
lowerToken.startsWith('duration:')) {
|
|
202
|
-
const val = lowerToken.replace(/^(slow:|dur:|duration:)/, '').trim();
|
|
203
|
-
let thresholdMs = 0;
|
|
204
|
-
let isGreater = true;
|
|
205
|
-
let cleanVal = val;
|
|
206
|
-
if (val.startsWith('>=')) {
|
|
207
|
-
isGreater = true;
|
|
208
|
-
cleanVal = val.slice(2);
|
|
209
|
-
}
|
|
210
|
-
else if (val.startsWith('>')) {
|
|
211
|
-
isGreater = true;
|
|
212
|
-
cleanVal = val.slice(1);
|
|
213
|
-
}
|
|
214
|
-
else if (val.startsWith('<=')) {
|
|
215
|
-
isGreater = false;
|
|
216
|
-
cleanVal = val.slice(2);
|
|
217
|
-
}
|
|
218
|
-
else if (val.startsWith('<')) {
|
|
219
|
-
isGreater = false;
|
|
220
|
-
cleanVal = val.slice(1);
|
|
221
|
-
}
|
|
222
|
-
if (cleanVal.endsWith('s') && !cleanVal.endsWith('ms')) {
|
|
223
|
-
thresholdMs = parseFloat(cleanVal.slice(0, -1)) * 1000;
|
|
224
|
-
}
|
|
225
|
-
else if (cleanVal.endsWith('ms')) {
|
|
226
|
-
thresholdMs = parseFloat(cleanVal.slice(0, -2));
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
thresholdMs = parseFloat(cleanVal);
|
|
230
|
-
}
|
|
231
|
-
if (!isNaN(thresholdMs)) {
|
|
232
|
-
if (isGreater) {
|
|
233
|
-
if (durationNum < thresholdMs)
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
if (durationNum > thresholdMs)
|
|
238
|
-
return false;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
continue;
|
|
242
|
-
}
|
|
243
|
-
if (lowerToken.startsWith('client:') || lowerToken.startsWith('c:')) {
|
|
244
|
-
const targetClient = lowerToken.replace(/^(client:|c:)/, '').trim();
|
|
245
|
-
if (!clientStr.includes(targetClient))
|
|
246
|
-
return false;
|
|
247
|
-
continue;
|
|
248
|
-
}
|
|
249
|
-
if (lowerToken.startsWith('domain:') || lowerToken.startsWith('d:')) {
|
|
250
|
-
const targetDomain = lowerToken.replace(/^(domain:|d:)/, '').trim();
|
|
251
|
-
if (!urlStr.includes(targetDomain))
|
|
252
|
-
return false;
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
if (lowerToken.startsWith('path:') ||
|
|
256
|
-
lowerToken.startsWith('p:') ||
|
|
257
|
-
lowerToken.startsWith('page:')) {
|
|
258
|
-
const targetPath = lowerToken
|
|
259
|
-
.replace(/^(path:|p:|page:)/, '')
|
|
260
|
-
.trim();
|
|
261
|
-
if (!urlStr.includes(targetPath) &&
|
|
262
|
-
!pathStr.includes(targetPath) &&
|
|
263
|
-
!callerStr.includes(targetPath)) {
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
if (lowerToken.startsWith('req:') || lowerToken.startsWith('body:')) {
|
|
269
|
-
const target = lowerToken.replace(/^(req:|body:)/, '').trim();
|
|
270
|
-
if (!reqStr.includes(target))
|
|
271
|
-
return false;
|
|
272
|
-
continue;
|
|
273
|
-
}
|
|
274
|
-
if (lowerToken.startsWith('res:')) {
|
|
275
|
-
const target = lowerToken.slice(4).trim();
|
|
276
|
-
if (!resStr.includes(target))
|
|
277
|
-
return false;
|
|
278
|
-
continue;
|
|
279
|
-
}
|
|
280
|
-
if (lowerToken.startsWith('header:') || lowerToken.startsWith('h:')) {
|
|
281
|
-
const target = lowerToken.replace(/^(header:|h:)/, '').trim();
|
|
282
|
-
if (!reqHeadersStr.includes(target) && !resHeadersStr.includes(target)) {
|
|
283
|
-
return false;
|
|
284
|
-
}
|
|
285
|
-
continue;
|
|
286
|
-
}
|
|
287
|
-
if (isRegex) {
|
|
288
|
-
try {
|
|
289
|
-
const re = new RegExp(token, isCaseSensitive ? '' : 'i');
|
|
290
|
-
if (!re.test(targetCorpus))
|
|
291
|
-
return false;
|
|
292
|
-
}
|
|
293
|
-
catch {
|
|
294
|
-
const queryTerm = isCaseSensitive ? token : lowerToken;
|
|
295
|
-
if (!targetCorpus.includes(queryTerm))
|
|
296
|
-
return false;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
else {
|
|
300
|
-
const queryTerm = isCaseSensitive ? token : lowerToken;
|
|
301
|
-
if (!targetCorpus.includes(queryTerm)) {
|
|
302
|
-
if (queryTerm === 'error' ||
|
|
303
|
-
queryTerm === 'failed' ||
|
|
304
|
-
queryTerm === 'fail') {
|
|
305
|
-
const isErr = log.status === 0 || (statusNum !== null && statusNum >= 400);
|
|
306
|
-
if (isErr)
|
|
307
|
-
continue;
|
|
308
|
-
}
|
|
309
|
-
return false;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
return true;
|
|
39
|
+
const corpus = [
|
|
40
|
+
methodRaw,
|
|
41
|
+
urlRaw,
|
|
42
|
+
statusStr,
|
|
43
|
+
pathRaw,
|
|
44
|
+
callerRaw,
|
|
45
|
+
clientRaw,
|
|
46
|
+
reqRaw,
|
|
47
|
+
resRaw,
|
|
48
|
+
reqHeadersRaw,
|
|
49
|
+
resHeadersRaw,
|
|
50
|
+
].join(' ');
|
|
51
|
+
return rawTokens.every(token => {
|
|
52
|
+
if (corpus.includes(token))
|
|
53
|
+
return true;
|
|
54
|
+
if (token === 'error' || token === 'failed' || token === 'err' || token === 'fail') {
|
|
55
|
+
return log.status === 0 || (statusNum !== null && statusNum >= 400);
|
|
56
|
+
}
|
|
57
|
+
if (token === 'success' || token === 'ok' || token === '2xx') {
|
|
58
|
+
return statusNum !== null && statusNum >= 200 && statusNum < 300;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
});
|
|
314
62
|
}
|
|
@@ -1,2 +1,7 @@
|
|
|
1
1
|
export declare function setTelemetryEnabled(enabled: boolean): void;
|
|
2
|
+
export declare function markSearchFilterUsed(): void;
|
|
2
3
|
export declare function trackActiveTelemetryHeartbeat(telemetryEnabled?: boolean, environment?: string): Promise<void>;
|
|
4
|
+
export declare function trackTelemetryEvent(eventName: string, eventParams?: Record<string, any>): Promise<void>;
|
|
5
|
+
export declare function trackInspectorTabView(tabName: string): void;
|
|
6
|
+
export declare function trackInspectorScreenView(screenName: string): void;
|
|
7
|
+
export declare function trackInspectorScreenRecord(action: 'start' | 'stop' | 'toggle', recordingType?: string): void;
|