react-native-inapp-inspector 2.4.1 → 2.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ar.md +163 -0
- package/README.de.md +163 -0
- package/README.es.md +164 -0
- package/README.fr.md +163 -0
- package/README.hi.md +163 -0
- package/README.ja.md +180 -0
- package/README.ko.md +163 -0
- package/README.md +340 -243
- package/README.pt-BR.md +163 -0
- package/README.ru.md +163 -0
- package/README.zh-CN.md +387 -0
- package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +82 -21
- package/assets/banner_dark.svg +186 -0
- package/assets/banner_light.svg +186 -0
- package/assets/icon_circle.svg +148 -0
- package/assets/icon_square.svg +369 -0
- package/assets/inapp_inspector_icon.gif +0 -0
- package/assets/inapp_inspector_icon_original.gif +0 -0
- package/assets/social_preview.png +0 -0
- package/assets/walkthrough.gif +0 -0
- package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
- package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
- package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
- package/dist/commonjs/components/AppHeaderLogo.js +7 -5
- package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
- package/dist/commonjs/components/BrandSquareIcon.js +139 -0
- package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
- package/dist/commonjs/components/ConsoleLogCard.js +23 -39
- package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +5 -5
- package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
- package/dist/commonjs/components/Inspector/ConfirmationModal.js +32 -0
- package/dist/commonjs/components/Inspector/ConsoleTab.js +11 -11
- package/dist/commonjs/components/Inspector/CrashTab.js +14 -12
- package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
- package/dist/commonjs/components/Inspector/FabLauncher.js +22 -30
- package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
- package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +90 -0
- package/dist/commonjs/components/Inspector/MainScreen.js +46 -33
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +21 -19
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +85 -101
- package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
- package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
- package/dist/commonjs/components/Inspector/PushCard.js +5 -4
- package/dist/commonjs/components/Inspector/PushDetail.js +32 -23
- package/dist/commonjs/components/Inspector/PushTab.js +12 -12
- package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
- package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
- package/dist/commonjs/components/Inspector/SettingsPanel.js +258 -139
- package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
- package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
- package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
- package/dist/commonjs/components/Inspector/SocketDetail.js +317 -0
- package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
- package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
- package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
- package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
- package/dist/commonjs/components/Inspector/StorageTab.js +38 -36
- package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
- package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
- package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
- package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
- package/dist/commonjs/components/Inspector/TabBar.js +24 -23
- package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
- package/dist/commonjs/components/JsonViewer.js +7 -7
- package/dist/commonjs/components/LogCard.d.ts +3 -2
- package/dist/commonjs/components/LogCard.js +13 -13
- package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
- package/dist/commonjs/components/ModuleErrorBoundary.js +2 -2
- package/dist/commonjs/components/NetworkIcons.d.ts +15 -0
- package/dist/commonjs/components/NetworkIcons.js +38 -3
- package/dist/commonjs/components/SegmentedTabs.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
- package/dist/commonjs/customHooks/socketLogger.js +2 -0
- package/dist/commonjs/helpers/index.js +3 -3
- package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
- package/dist/commonjs/helpers/memoryManager.js +1 -1
- package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
- package/dist/commonjs/helpers/searchQueryParser.js +5 -1
- package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
- package/dist/commonjs/helpers/shareFormatter.js +8 -7
- package/dist/commonjs/i18n/index.d.ts +99 -1
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -1
- package/dist/commonjs/i18n/locales/bn.json +1 -0
- package/dist/commonjs/i18n/locales/de.json +1 -1
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -1
- package/dist/commonjs/i18n/locales/fr.json +1 -1
- package/dist/commonjs/i18n/locales/gu.json +1 -0
- package/dist/commonjs/i18n/locales/hi.json +1 -1
- package/dist/commonjs/i18n/locales/id.json +1 -0
- package/dist/commonjs/i18n/locales/it.json +1 -0
- package/dist/commonjs/i18n/locales/ja.json +1 -1
- package/dist/commonjs/i18n/locales/kn.json +1 -0
- package/dist/commonjs/i18n/locales/ko.json +1 -1
- package/dist/commonjs/i18n/locales/ml.json +1 -0
- package/dist/commonjs/i18n/locales/mr.json +1 -0
- package/dist/commonjs/i18n/locales/nl.json +1 -0
- package/dist/commonjs/i18n/locales/pa.json +1 -0
- package/dist/commonjs/i18n/locales/pl.json +1 -0
- package/dist/commonjs/i18n/locales/pt.json +1 -1
- package/dist/commonjs/i18n/locales/ru.json +1 -1
- package/dist/commonjs/i18n/locales/ta.json +1 -0
- package/dist/commonjs/i18n/locales/te.json +1 -0
- package/dist/commonjs/i18n/locales/tr.json +1 -0
- package/dist/commonjs/i18n/locales/vi.json +1 -0
- package/dist/commonjs/i18n/locales/zh.json +1 -1
- package/dist/commonjs/index.d.ts +13 -13
- package/dist/commonjs/index.js +5 -4
- package/dist/commonjs/native/NativeInspector.d.ts +1 -0
- package/dist/commonjs/socket.d.ts +4 -0
- package/dist/commonjs/socket.js +1 -0
- package/dist/commonjs/styles/index.d.ts +23 -0
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/enums.d.ts +40 -0
- package/dist/commonjs/types/enums.js +1 -1
- package/dist/commonjs/types/interfaces.d.ts +122 -1
- package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
- package/dist/esm/components/AnimatedBrandOwl.js +175 -0
- package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
- package/dist/esm/components/AppHeaderLogo.js +7 -5
- package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
- package/dist/esm/components/BrandSquareIcon.js +139 -0
- package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
- package/dist/esm/components/ConsoleLogCard.js +61 -77
- package/dist/esm/components/Inspector/AboutModal.js +85 -95
- package/dist/esm/components/Inspector/AnalyticsTab.js +15 -15
- package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
- package/dist/esm/components/Inspector/ConfirmationModal.js +32 -0
- package/dist/esm/components/Inspector/ConsoleTab.js +47 -47
- package/dist/esm/components/Inspector/CrashTab.js +34 -32
- package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
- package/dist/esm/components/Inspector/FabLauncher.js +50 -58
- package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
- package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
- package/dist/esm/components/Inspector/LanguageSelectorModal.js +90 -0
- package/dist/esm/components/Inspector/MainScreen.js +123 -110
- package/dist/esm/components/Inspector/MediaGalleryTab.js +64 -62
- package/dist/esm/components/Inspector/MediaPreviewModal.js +107 -123
- package/dist/esm/components/Inspector/NetworkTab.js +90 -90
- package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
- package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
- package/dist/esm/components/Inspector/PushCard.js +23 -22
- package/dist/esm/components/Inspector/PushDetail.js +34 -25
- package/dist/esm/components/Inspector/PushTab.js +23 -23
- package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
- package/dist/esm/components/Inspector/ReduxTab.js +22 -22
- package/dist/esm/components/Inspector/SettingsPanel.js +495 -376
- package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
- package/dist/esm/components/Inspector/SocketCard.js +116 -0
- package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
- package/dist/esm/components/Inspector/SocketDetail.js +317 -0
- package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
- package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
- package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
- package/dist/esm/components/Inspector/SocketTab.js +112 -0
- package/dist/esm/components/Inspector/StorageTab.js +145 -143
- package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
- package/dist/esm/components/Inspector/SupportModal.js +125 -0
- package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
- package/dist/esm/components/Inspector/SupportPage.js +227 -0
- package/dist/esm/components/Inspector/TabBar.js +36 -35
- package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
- package/dist/esm/components/JsonViewer.js +55 -55
- package/dist/esm/components/LogCard.d.ts +3 -2
- package/dist/esm/components/LogCard.js +60 -60
- package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
- package/dist/esm/components/ModuleErrorBoundary.js +23 -23
- package/dist/esm/components/NetworkIcons.d.ts +15 -0
- package/dist/esm/components/NetworkIcons.js +38 -3
- package/dist/esm/components/SegmentedTabs.js +7 -7
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/socketLogger.d.ts +26 -0
- package/dist/esm/customHooks/socketLogger.js +2 -0
- package/dist/esm/helpers/index.js +3 -3
- package/dist/esm/helpers/memoryManager.d.ts +1 -0
- package/dist/esm/helpers/memoryManager.js +1 -1
- package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
- package/dist/esm/helpers/searchQueryParser.js +5 -1
- package/dist/esm/helpers/settingsStore.d.ts +1 -0
- package/dist/esm/helpers/settingsStore.js +1 -1
- package/dist/esm/helpers/shareFormatter.d.ts +3 -1
- package/dist/esm/helpers/shareFormatter.js +8 -7
- package/dist/esm/i18n/index.d.ts +99 -1
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -1
- package/dist/esm/i18n/locales/bn.json +1 -0
- package/dist/esm/i18n/locales/de.json +1 -1
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -1
- package/dist/esm/i18n/locales/fr.json +1 -1
- package/dist/esm/i18n/locales/gu.json +1 -0
- package/dist/esm/i18n/locales/hi.json +1 -1
- package/dist/esm/i18n/locales/id.json +1 -0
- package/dist/esm/i18n/locales/it.json +1 -0
- package/dist/esm/i18n/locales/ja.json +1 -1
- package/dist/esm/i18n/locales/kn.json +1 -0
- package/dist/esm/i18n/locales/ko.json +1 -1
- package/dist/esm/i18n/locales/ml.json +1 -0
- package/dist/esm/i18n/locales/mr.json +1 -0
- package/dist/esm/i18n/locales/nl.json +1 -0
- package/dist/esm/i18n/locales/pa.json +1 -0
- package/dist/esm/i18n/locales/pl.json +1 -0
- package/dist/esm/i18n/locales/pt.json +1 -1
- package/dist/esm/i18n/locales/ru.json +1 -1
- package/dist/esm/i18n/locales/ta.json +1 -0
- package/dist/esm/i18n/locales/te.json +1 -0
- package/dist/esm/i18n/locales/tr.json +1 -0
- package/dist/esm/i18n/locales/vi.json +1 -0
- package/dist/esm/i18n/locales/zh.json +1 -1
- package/dist/esm/index.d.ts +13 -13
- package/dist/esm/index.js +8 -7
- package/dist/esm/native/NativeInspector.d.ts +1 -0
- package/dist/esm/socket.d.ts +4 -0
- package/dist/esm/socket.js +1 -0
- package/dist/esm/styles/index.d.ts +23 -0
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/enums.d.ts +40 -0
- package/dist/esm/types/enums.js +1 -1
- package/dist/esm/types/interfaces.d.ts +122 -1
- package/ios/NetworkInspectorModule.mm +102 -12
- package/package.json +204 -2
- package/src/native/NativeInspector.ts +8 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ViewStyle } from 'react-native';
|
|
3
3
|
import { Animated, PanResponderInstance } from 'react-native';
|
|
4
|
-
import type { ActiveTab, BreadcrumbType, CrashType, GroupedListItem, LocalFilter, LogFilter, Method, PushActionType, PushAppState, SettingsPage, SettingsSubTab, SortOrder, StatusFilter } from './index';
|
|
4
|
+
import type { ActiveTab, BreadcrumbType, CrashType, GroupedListItem, LocalFilter, LogFilter, Method, PushActionType, PushAppState, SettingsPage, SettingsSubTab, SocketFrameDirection, SocketFrameType, SocketStatus, SortOrder, StatusFilter } from './index';
|
|
5
5
|
export type SearchScope = 'all' | 'url' | 'reqBody' | 'resBody' | 'headers';
|
|
6
6
|
export interface ParsedStackFrame {
|
|
7
7
|
method: string;
|
|
@@ -133,6 +133,7 @@ export interface InspectorStorage {
|
|
|
133
133
|
}
|
|
134
134
|
export interface PersistedSettings {
|
|
135
135
|
isDark?: boolean;
|
|
136
|
+
language?: string;
|
|
136
137
|
modalHeightPercent?: number;
|
|
137
138
|
modalAnimationType?: string;
|
|
138
139
|
tabVisibility?: Record<string, boolean>;
|
|
@@ -142,6 +143,9 @@ export interface PersistedSettings {
|
|
|
142
143
|
maxAnalyticsEventsLimit?: number;
|
|
143
144
|
maxCrashLogs?: number;
|
|
144
145
|
maxPushLogsLimit?: number;
|
|
146
|
+
maxSocketLogsLimit?: number;
|
|
147
|
+
isSocketAutoCaptureEnabled?: boolean;
|
|
148
|
+
isGroupByPageEnabled?: boolean;
|
|
145
149
|
isAutoRamLimitEnabled?: boolean;
|
|
146
150
|
showConsoleLevels?: {
|
|
147
151
|
info: boolean;
|
|
@@ -163,6 +167,14 @@ export interface PersistedSettings {
|
|
|
163
167
|
starPromptActioned?: boolean;
|
|
164
168
|
starPromptLastShown?: number;
|
|
165
169
|
starPromptFirstSeen?: number;
|
|
170
|
+
captureImageFormat?: 'png' | 'jpeg' | 'webp';
|
|
171
|
+
captureAutoHide?: boolean;
|
|
172
|
+
captureAudioMode?: 'none' | 'app' | 'mic';
|
|
173
|
+
captureFps?: number;
|
|
174
|
+
captureScale?: number;
|
|
175
|
+
captureBitrate?: number;
|
|
176
|
+
captureMaxDurationSeconds?: number;
|
|
177
|
+
captureAutoGif?: boolean;
|
|
166
178
|
}
|
|
167
179
|
export interface NetworkInspectorProps {
|
|
168
180
|
enabled?: boolean;
|
|
@@ -185,6 +197,9 @@ export interface InspectorContextValue {
|
|
|
185
197
|
isMinimized: boolean;
|
|
186
198
|
setIsMinimized: React.Dispatch<React.SetStateAction<boolean>>;
|
|
187
199
|
minimizeInspector: () => void;
|
|
200
|
+
isDismissed: boolean;
|
|
201
|
+
setIsDismissed: React.Dispatch<React.SetStateAction<boolean>>;
|
|
202
|
+
dismissInspector: () => void;
|
|
188
203
|
isReady: boolean;
|
|
189
204
|
enabled: boolean;
|
|
190
205
|
isEnabled: boolean;
|
|
@@ -216,6 +231,8 @@ export interface InspectorContextValue {
|
|
|
216
231
|
setSettingsPage: React.Dispatch<React.SetStateAction<SettingsPage>>;
|
|
217
232
|
isAboutOpen: boolean;
|
|
218
233
|
setIsAboutOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
234
|
+
isSupportOpen: boolean;
|
|
235
|
+
setIsSupportOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
219
236
|
updateAvailable: boolean;
|
|
220
237
|
latestNpmVersion: string | null;
|
|
221
238
|
clearAnim: Animated.Value;
|
|
@@ -245,6 +262,12 @@ export interface InspectorContextValue {
|
|
|
245
262
|
setStatusFilters: React.Dispatch<React.SetStateAction<Set<StatusFilter>>>;
|
|
246
263
|
methodFilters: Set<Method>;
|
|
247
264
|
setMethodFilters: React.Dispatch<React.SetStateAction<Set<Method>>>;
|
|
265
|
+
latencyFilter: 'all' | 'fast' | 'normal' | 'slow';
|
|
266
|
+
setLatencyFilter: React.Dispatch<React.SetStateAction<'all' | 'fast' | 'normal' | 'slow'>>;
|
|
267
|
+
protocolFilter: 'all' | 'https' | 'http';
|
|
268
|
+
setProtocolFilter: React.Dispatch<React.SetStateAction<'all' | 'https' | 'http'>>;
|
|
269
|
+
networkSortBy: 'time_desc' | 'time_asc' | 'duration_desc' | 'duration_asc' | 'size_desc';
|
|
270
|
+
setNetworkSortBy: React.Dispatch<React.SetStateAction<'time_desc' | 'time_asc' | 'duration_desc' | 'duration_asc' | 'size_desc'>>;
|
|
248
271
|
availableMethods: Method[];
|
|
249
272
|
sortOrder: SortOrder;
|
|
250
273
|
setSortOrder: React.Dispatch<React.SetStateAction<SortOrder>>;
|
|
@@ -257,6 +280,8 @@ export interface InspectorContextValue {
|
|
|
257
280
|
toggleSectionCollapse: (pageName: string) => void;
|
|
258
281
|
loadMoreSection: (pageName: string, step?: number) => void;
|
|
259
282
|
handleDelete: () => void;
|
|
283
|
+
isGroupByPageEnabled: boolean;
|
|
284
|
+
setIsGroupByPageEnabled: React.Dispatch<React.SetStateAction<boolean>>;
|
|
260
285
|
detailTitle: string;
|
|
261
286
|
detailDisplayUrl: string;
|
|
262
287
|
apiDetailActiveTab: 'metadata' | 'headers' | 'request' | 'response';
|
|
@@ -332,6 +357,22 @@ export interface InspectorContextValue {
|
|
|
332
357
|
setMaxPushLogs: React.Dispatch<React.SetStateAction<number>>;
|
|
333
358
|
clearAllPushLogs: () => void;
|
|
334
359
|
simulatePush: (preset?: 'salesforce' | 'fcm' | 'apns' | 'deeplink' | 'rich_media' | 'custom', customData?: any) => void;
|
|
360
|
+
socketRecords: SocketConnectionRecord[];
|
|
361
|
+
filteredSocketRecords: SocketConnectionRecord[];
|
|
362
|
+
selectedSocket: SocketConnectionRecord | null;
|
|
363
|
+
setSelectedSocket: React.Dispatch<React.SetStateAction<SocketConnectionRecord | null>>;
|
|
364
|
+
socketSearch: string;
|
|
365
|
+
setSocketSearch: React.Dispatch<React.SetStateAction<string>>;
|
|
366
|
+
socketQuickFilter: string;
|
|
367
|
+
setSocketQuickFilter: React.Dispatch<React.SetStateAction<string>>;
|
|
368
|
+
lastReadSocketCount: number;
|
|
369
|
+
unreadSocketCount: number;
|
|
370
|
+
maxSocketLogs: number;
|
|
371
|
+
setMaxSocketLogs: React.Dispatch<React.SetStateAction<number>>;
|
|
372
|
+
clearAllSocketLogs: () => void;
|
|
373
|
+
deleteSocketRecord?: (id: string) => void;
|
|
374
|
+
deleteMultipleSocketRecords?: (ids: string[]) => void;
|
|
375
|
+
simulateSocket: (preset?: 'chat' | 'crypto' | 'socketio' | 'echo' | 'custom', customData?: any) => void;
|
|
335
376
|
settingsActiveSubTab: SettingsSubTab;
|
|
336
377
|
setSettingsActiveSubTab: React.Dispatch<React.SetStateAction<SettingsSubTab>>;
|
|
337
378
|
defaultTab: ActiveTab;
|
|
@@ -367,6 +408,22 @@ export interface InspectorContextValue {
|
|
|
367
408
|
setReduxAutoRefreshState: React.Dispatch<React.SetStateAction<boolean>>;
|
|
368
409
|
reduxExpandDepth: number;
|
|
369
410
|
setReduxExpandDepth: React.Dispatch<React.SetStateAction<number>>;
|
|
411
|
+
captureFps: number;
|
|
412
|
+
setCaptureFps: React.Dispatch<React.SetStateAction<number>>;
|
|
413
|
+
captureScale: number;
|
|
414
|
+
setCaptureScale: React.Dispatch<React.SetStateAction<number>>;
|
|
415
|
+
captureBitrate: number;
|
|
416
|
+
setCaptureBitrate: React.Dispatch<React.SetStateAction<number>>;
|
|
417
|
+
captureMaxDurationSeconds: number;
|
|
418
|
+
setCaptureMaxDurationSeconds: React.Dispatch<React.SetStateAction<number>>;
|
|
419
|
+
captureImageFormat: 'png' | 'jpeg' | 'webp';
|
|
420
|
+
setCaptureImageFormat: React.Dispatch<React.SetStateAction<'png' | 'jpeg' | 'webp'>>;
|
|
421
|
+
captureAudioMode: 'none' | 'app' | 'mic';
|
|
422
|
+
setCaptureAudioMode: React.Dispatch<React.SetStateAction<'none' | 'app' | 'mic'>>;
|
|
423
|
+
captureAutoHide: boolean;
|
|
424
|
+
setCaptureAutoHide: React.Dispatch<React.SetStateAction<boolean>>;
|
|
425
|
+
captureAutoGif: boolean;
|
|
426
|
+
setCaptureAutoGif: React.Dispatch<React.SetStateAction<boolean>>;
|
|
370
427
|
}
|
|
371
428
|
export interface CopyButtonProps {
|
|
372
429
|
value: unknown | (() => unknown);
|
|
@@ -457,6 +514,7 @@ export interface AnimatedEntranceProps {
|
|
|
457
514
|
export interface ConsoleLogCardProps {
|
|
458
515
|
item: ConsoleLog;
|
|
459
516
|
searchStr?: string;
|
|
517
|
+
onPress?: (item: ConsoleLog) => void;
|
|
460
518
|
}
|
|
461
519
|
export interface JsonContent {
|
|
462
520
|
header: string;
|
|
@@ -522,3 +580,66 @@ export interface PushDetailProps {
|
|
|
522
580
|
item: PushNotificationRecord | null;
|
|
523
581
|
onClose: () => void;
|
|
524
582
|
}
|
|
583
|
+
export interface SocketFrame {
|
|
584
|
+
id: string;
|
|
585
|
+
timestamp: number;
|
|
586
|
+
direction: SocketFrameDirection;
|
|
587
|
+
type: SocketFrameType;
|
|
588
|
+
data: any;
|
|
589
|
+
raw?: any;
|
|
590
|
+
size?: number;
|
|
591
|
+
eventName?: string;
|
|
592
|
+
ackId?: number;
|
|
593
|
+
}
|
|
594
|
+
export interface SocketConnectionRecord {
|
|
595
|
+
id: string;
|
|
596
|
+
url: string;
|
|
597
|
+
protocols?: string | string[];
|
|
598
|
+
readyState: number;
|
|
599
|
+
status: SocketStatus;
|
|
600
|
+
startTime: number;
|
|
601
|
+
endTime?: number;
|
|
602
|
+
duration?: number;
|
|
603
|
+
closeCode?: number;
|
|
604
|
+
closeReason?: string;
|
|
605
|
+
error?: string | any;
|
|
606
|
+
client: 'websocket' | 'socket.io' | string;
|
|
607
|
+
frames: SocketFrame[];
|
|
608
|
+
sentCount: number;
|
|
609
|
+
receivedCount: number;
|
|
610
|
+
totalBytesSent: number;
|
|
611
|
+
totalBytesReceived: number;
|
|
612
|
+
caller?: string;
|
|
613
|
+
query?: Record<string, string>;
|
|
614
|
+
headers?: Record<string, string>;
|
|
615
|
+
routeInfo?: RouteInfo;
|
|
616
|
+
}
|
|
617
|
+
export interface SocketFilterState {
|
|
618
|
+
search: string;
|
|
619
|
+
status: Set<string>;
|
|
620
|
+
types: Set<string>;
|
|
621
|
+
sortBy: 'time_desc' | 'time_asc' | 'frames_desc' | 'duration_desc';
|
|
622
|
+
}
|
|
623
|
+
export interface SocketStats {
|
|
624
|
+
total: number;
|
|
625
|
+
open: number;
|
|
626
|
+
closed: number;
|
|
627
|
+
error: number;
|
|
628
|
+
totalFrames: number;
|
|
629
|
+
sentFrames: number;
|
|
630
|
+
receivedFrames: number;
|
|
631
|
+
totalBytes: number;
|
|
632
|
+
}
|
|
633
|
+
export interface SocketCardProps {
|
|
634
|
+
item: SocketConnectionRecord;
|
|
635
|
+
onPress: () => void;
|
|
636
|
+
searchStr?: string;
|
|
637
|
+
isNew?: boolean;
|
|
638
|
+
isSelected?: boolean;
|
|
639
|
+
onToggleSelect?: (id: string) => void;
|
|
640
|
+
serialNumber?: number;
|
|
641
|
+
}
|
|
642
|
+
export interface SocketDetailProps {
|
|
643
|
+
item: SocketConnectionRecord | null;
|
|
644
|
+
onClose: () => void;
|
|
645
|
+
}
|
|
@@ -539,6 +539,21 @@ RCT_EXPORT_MODULE(NetworkInspectorModule);
|
|
|
539
539
|
return YES;
|
|
540
540
|
}
|
|
541
541
|
|
|
542
|
+
- (NSDictionary *)constantsToExport {
|
|
543
|
+
NSBundle *mainBundle = [NSBundle mainBundle];
|
|
544
|
+
NSString *appName = [mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"] ?: [mainBundle objectForInfoDictionaryKey:@"CFBundleName"] ?: @"App";
|
|
545
|
+
NSString *appVersion = [mainBundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"] ?: @"1.0";
|
|
546
|
+
NSString *appBuild = [mainBundle objectForInfoDictionaryKey:@"CFBundleVersion"] ?: @"1";
|
|
547
|
+
NSString *appBundleId = [mainBundle bundleIdentifier] ?: @"";
|
|
548
|
+
return @{
|
|
549
|
+
@"appName": appName,
|
|
550
|
+
@"appVersion": appVersion,
|
|
551
|
+
@"appBuild": appBuild,
|
|
552
|
+
@"appBundleId": appBundleId,
|
|
553
|
+
@"appPackageName": appBundleId
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
|
|
542
557
|
- (void)safeSendEvent:(NSString *)eventName body:(id)body {
|
|
543
558
|
if (!hasListeners) return;
|
|
544
559
|
if (self.bridge == nil) return;
|
|
@@ -1235,6 +1250,9 @@ RCT_EXPORT_METHOD(getNativeCachedPage:(NSString *)pageKey
|
|
|
1235
1250
|
rgbColorSpace,
|
|
1236
1251
|
(CGBitmapInfo)kCGBitmapByteOrder32Little | (CGBitmapInfo)kCGImageAlphaPremultipliedFirst);
|
|
1237
1252
|
if (context) {
|
|
1253
|
+
// Invert Y axis for CGBitmapContext so row 0 aligns with the top of the video frame
|
|
1254
|
+
CGContextTranslateCTM(context, 0, size.height);
|
|
1255
|
+
CGContextScaleCTM(context, 1.0, -1.0);
|
|
1238
1256
|
UIGraphicsPushContext(context);
|
|
1239
1257
|
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
|
|
1240
1258
|
UIGraphicsPopContext();
|
|
@@ -1275,10 +1293,25 @@ RCT_EXPORT_METHOD(getNativeCachedPage:(NSString *)pageKey
|
|
|
1275
1293
|
return;
|
|
1276
1294
|
}
|
|
1277
1295
|
|
|
1296
|
+
// Read bitrate from options (default: adaptive based on resolution)
|
|
1297
|
+
double bitrateParam = [options[@"bitrate"] doubleValue];
|
|
1298
|
+
if (bitrateParam <= 0.0) {
|
|
1299
|
+
// Auto-calculate: ~6 Mbps for 1080p, scales proportionally
|
|
1300
|
+
bitrateParam = (double)(width * height) * 4.0;
|
|
1301
|
+
if (bitrateParam < 1000000.0) bitrateParam = 1000000.0; // Floor: 1 Mbps
|
|
1302
|
+
if (bitrateParam > 20000000.0) bitrateParam = 20000000.0; // Ceiling: 20 Mbps
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1278
1305
|
NSDictionary *videoSettings = @{
|
|
1279
1306
|
AVVideoCodecKey: AVVideoCodecTypeH264,
|
|
1280
1307
|
AVVideoWidthKey: @(videoSize.width),
|
|
1281
1308
|
AVVideoHeightKey: @(videoSize.height),
|
|
1309
|
+
AVVideoCompressionPropertiesKey: @{
|
|
1310
|
+
AVVideoAverageBitRateKey: @((NSInteger)bitrateParam),
|
|
1311
|
+
AVVideoMaxKeyFrameIntervalKey: @(30),
|
|
1312
|
+
AVVideoProfileLevelKey: AVVideoProfileLevelH264HighAutoLevel,
|
|
1313
|
+
AVVideoExpectedSourceFrameRateKey: @([options[@"fps"] doubleValue] > 0 ? [options[@"fps"] doubleValue] : 30),
|
|
1314
|
+
},
|
|
1282
1315
|
};
|
|
1283
1316
|
|
|
1284
1317
|
self->_softwareWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings];
|
|
@@ -1307,9 +1340,12 @@ RCT_EXPORT_METHOD(getNativeCachedPage:(NSString *)pageKey
|
|
|
1307
1340
|
self->_softwareVideoHeight = height;
|
|
1308
1341
|
|
|
1309
1342
|
double fps = [options[@"fps"] doubleValue];
|
|
1310
|
-
if (fps <= 0.0 || fps >
|
|
1343
|
+
if (fps <= 0.0 || fps > 60.0) fps = 30.0;
|
|
1311
1344
|
double frameInterval = 1.0 / fps;
|
|
1312
1345
|
|
|
1346
|
+
double maxDuration = [options[@"maxDurationSeconds"] doubleValue];
|
|
1347
|
+
if (maxDuration <= 0.0 || maxDuration > 300.0) maxDuration = 120.0;
|
|
1348
|
+
|
|
1313
1349
|
// Immediately capture frame 0 & save thumbnail
|
|
1314
1350
|
UIImage *firstImg = [self captureScreenHierarchyWithScale:(CGFloat)scaleParam];
|
|
1315
1351
|
if (firstImg) {
|
|
@@ -1336,24 +1372,54 @@ RCT_EXPORT_METHOD(getNativeCachedPage:(NSString *)pageKey
|
|
|
1336
1372
|
dispatch_source_set_timer(self->_softwareRecordingTimerSource, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(frameInterval * NSEC_PER_SEC)), (uint64_t)(frameInterval * NSEC_PER_SEC), (uint64_t)(frameInterval * 0.1 * NSEC_PER_SEC));
|
|
1337
1373
|
|
|
1338
1374
|
__weak NetworkInspectorModule *weakSelf = self;
|
|
1375
|
+
__block BOOL isFrameBusy = NO;
|
|
1376
|
+
NSTimeInterval recordingStartTime = self->_softwareRecordingStartTime;
|
|
1339
1377
|
dispatch_source_set_event_handler(self->_softwareRecordingTimerSource, ^{
|
|
1340
1378
|
NetworkInspectorModule *strongSelf = weakSelf;
|
|
1341
1379
|
if (!strongSelf || !strongSelf->_isSoftwareRecordingActive) return;
|
|
1342
1380
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1381
|
+
// Auto-stop guard: enforce max recording duration
|
|
1382
|
+
NSTimeInterval elapsed = [[NSDate date] timeIntervalSince1970] - recordingStartTime;
|
|
1383
|
+
if (elapsed >= maxDuration) {
|
|
1384
|
+
strongSelf->_isSoftwareRecordingActive = NO;
|
|
1385
|
+
return;
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1388
|
+
if (isFrameBusy) {
|
|
1389
|
+
// Drop frame tick if previous frame capture or encoding is still executing to prevent UI freezing
|
|
1390
|
+
return;
|
|
1391
|
+
}
|
|
1392
|
+
isFrameBusy = YES;
|
|
1393
|
+
|
|
1394
|
+
// Fast snapshot on main queue without blocking user interactions
|
|
1395
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
1396
|
+
if (!strongSelf || !strongSelf->_isSoftwareRecordingActive) {
|
|
1397
|
+
isFrameBusy = NO;
|
|
1398
|
+
return;
|
|
1399
|
+
}
|
|
1400
|
+
if (!strongSelf->_softwareAssetWriter || strongSelf->_softwareAssetWriter.status != AVAssetWriterStatusWriting) {
|
|
1401
|
+
isFrameBusy = NO;
|
|
1402
|
+
return;
|
|
1403
|
+
}
|
|
1346
1404
|
|
|
1347
1405
|
UIImage *frameImg = [strongSelf captureScreenHierarchyWithScale:(CGFloat)scaleParam];
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1406
|
+
|
|
1407
|
+
// Offload all heavy CVPixelBuffer creation, context drawing, and AVAssetWriter append to background queue
|
|
1408
|
+
dispatch_async(queue, ^{
|
|
1409
|
+
@try {
|
|
1410
|
+
if (strongSelf && strongSelf->_isSoftwareRecordingActive && frameImg && strongSelf->_softwareWriterInput.isReadyForMoreMediaData) {
|
|
1411
|
+
CVPixelBufferRef buffer = [strongSelf createPixelBufferFromUIImage:frameImg size:videoSize];
|
|
1412
|
+
if (buffer) {
|
|
1413
|
+
CMTime presentTime = CMTimeMake((int64_t)(strongSelf->_softwareFrameIndex * 1000 / fps), 1000);
|
|
1414
|
+
[strongSelf->_softwarePixelBufferAdaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
|
|
1415
|
+
CVPixelBufferRelease(buffer);
|
|
1416
|
+
strongSelf->_softwareFrameIndex++;
|
|
1417
|
+
}
|
|
1418
|
+
}
|
|
1419
|
+
} @finally {
|
|
1420
|
+
isFrameBusy = NO;
|
|
1355
1421
|
}
|
|
1356
|
-
}
|
|
1422
|
+
});
|
|
1357
1423
|
});
|
|
1358
1424
|
});
|
|
1359
1425
|
|
|
@@ -1487,6 +1553,30 @@ RCT_EXPORT_METHOD(stopVideoRecording:(RCTPromiseResolveBlock)resolve
|
|
|
1487
1553
|
|
|
1488
1554
|
if (thumbPath && [[NSFileManager defaultManager] fileExistsAtPath:thumbPath]) {
|
|
1489
1555
|
result[@"thumbnailUri"] = [NSURL fileURLWithPath:thumbPath].absoluteString;
|
|
1556
|
+
} else {
|
|
1557
|
+
@try {
|
|
1558
|
+
NSURL *vidUrl = [NSURL fileURLWithPath:filePath];
|
|
1559
|
+
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:vidUrl options:nil];
|
|
1560
|
+
AVAssetImageGenerator *gen = [[AVAssetImageGenerator alloc] initWithAsset:asset];
|
|
1561
|
+
gen.appliesPreferredTrackTransform = YES;
|
|
1562
|
+
gen.requestedTimeToleranceBefore = kCMTimePositiveInfinity;
|
|
1563
|
+
gen.requestedTimeToleranceAfter = kCMTimePositiveInfinity;
|
|
1564
|
+
gen.maximumSize = CGSizeMake(720, 720);
|
|
1565
|
+
CMTime time = kCMTimeZero;
|
|
1566
|
+
NSError *err = nil;
|
|
1567
|
+
CGImageRef imgRef = [gen copyCGImageAtTime:time actualTime:NULL error:&err];
|
|
1568
|
+
if (imgRef) {
|
|
1569
|
+
UIImage *thumbImg = [UIImage imageWithCGImage:imgRef];
|
|
1570
|
+
CGImageRelease(imgRef);
|
|
1571
|
+
NSData *tData = UIImageJPEGRepresentation(thumbImg, 0.85);
|
|
1572
|
+
if (tData) {
|
|
1573
|
+
NSString *generatedThumbFile = [NSString stringWithFormat:@"thumb_%lld.jpg", timestamp];
|
|
1574
|
+
NSString *generatedThumbPath = [[self getCapturesDirectory] stringByAppendingPathComponent:generatedThumbFile];
|
|
1575
|
+
[tData writeToFile:generatedThumbPath atomically:YES];
|
|
1576
|
+
result[@"thumbnailUri"] = [NSURL fileURLWithPath:generatedThumbPath].absoluteString;
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
} @catch (NSException *e) {}
|
|
1490
1580
|
}
|
|
1491
1581
|
|
|
1492
1582
|
resolve(result);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-inapp-inspector",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2",
|
|
4
4
|
"description": "The zero-config, all-in-one in-app debugger & network logger for React Native & Expo (Flipper / Chucker alternative). Inspect Network (fetch/Axios/GraphQL), Console logs with Metro Symbolication, Redux State, Firebase Analytics, Storage (AsyncStorage/MMKV), Hardware Telemetry, and JS Bundle size directly on device.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -80,6 +80,13 @@
|
|
|
80
80
|
"require": "./dist/commonjs/push.js",
|
|
81
81
|
"default": "./dist/commonjs/push.js"
|
|
82
82
|
},
|
|
83
|
+
"./socket": {
|
|
84
|
+
"react-native": "./dist/commonjs/socket.js",
|
|
85
|
+
"types": "./dist/commonjs/socket.d.ts",
|
|
86
|
+
"import": "./dist/esm/socket.js",
|
|
87
|
+
"require": "./dist/commonjs/socket.js",
|
|
88
|
+
"default": "./dist/commonjs/socket.js"
|
|
89
|
+
},
|
|
83
90
|
"./metro": {
|
|
84
91
|
"types": "./dist/commonjs/metro.d.ts",
|
|
85
92
|
"import": "./dist/esm/metro.js",
|
|
@@ -92,6 +99,7 @@
|
|
|
92
99
|
"dist",
|
|
93
100
|
"src/native",
|
|
94
101
|
"bin",
|
|
102
|
+
"assets",
|
|
95
103
|
"metro.js",
|
|
96
104
|
"metro.d.ts",
|
|
97
105
|
"README.md",
|
|
@@ -186,7 +194,201 @@
|
|
|
186
194
|
"zero-config",
|
|
187
195
|
"debug-tool",
|
|
188
196
|
"ios",
|
|
189
|
-
"android"
|
|
197
|
+
"android",
|
|
198
|
+
"react-native-usa",
|
|
199
|
+
"react-native-uk",
|
|
200
|
+
"react-native-canada",
|
|
201
|
+
"react-native-australia",
|
|
202
|
+
"react-native-singapore",
|
|
203
|
+
"react-native-nigeria",
|
|
204
|
+
"react-native-抓包",
|
|
205
|
+
"移动端抓包",
|
|
206
|
+
"网络监控",
|
|
207
|
+
"调试工具",
|
|
208
|
+
"移动端调试器",
|
|
209
|
+
"移动端控制台",
|
|
210
|
+
"flipper替代方案",
|
|
211
|
+
"chucker替代方案",
|
|
212
|
+
"charles替代方案",
|
|
213
|
+
"proxyman替代",
|
|
214
|
+
"WebSocket抓包",
|
|
215
|
+
"MMKV查看器",
|
|
216
|
+
"AsyncStorage查看器",
|
|
217
|
+
"行動端偵錯",
|
|
218
|
+
"網路封包側錄",
|
|
219
|
+
"免电脑抓包",
|
|
220
|
+
"APP抓包工具",
|
|
221
|
+
"移动端开发工具",
|
|
222
|
+
"react-native网络日志",
|
|
223
|
+
"移动端网络调试",
|
|
224
|
+
"真机调试工具",
|
|
225
|
+
"react-native开发者工具",
|
|
226
|
+
"リアクトネイティブ",
|
|
227
|
+
"デバッガー",
|
|
228
|
+
"ネットワークロガー",
|
|
229
|
+
"パケットキャプチャ",
|
|
230
|
+
"開発ツール",
|
|
231
|
+
"フリッパー代替",
|
|
232
|
+
"通信ログ監視",
|
|
233
|
+
"チャールズ代替",
|
|
234
|
+
"アプリ内デバッガー",
|
|
235
|
+
"モバイル開発ツール",
|
|
236
|
+
"通信監視ツール",
|
|
237
|
+
"WebSocketデバッグ",
|
|
238
|
+
"端末内インスペクター",
|
|
239
|
+
"react-nativeデバッグ",
|
|
240
|
+
"モバイルパケットキャプチャ",
|
|
241
|
+
"通信ログ",
|
|
242
|
+
"端末内デバッガ",
|
|
243
|
+
"depurador-react-native",
|
|
244
|
+
"captura-de-red",
|
|
245
|
+
"registro-de-red",
|
|
246
|
+
"herramientas-desarrollo",
|
|
247
|
+
"alternativa-flipper",
|
|
248
|
+
"alternativa-charles",
|
|
249
|
+
"inspector-en-app",
|
|
250
|
+
"depuracion-movil",
|
|
251
|
+
"monitor-de-trafico-movil",
|
|
252
|
+
"react-native-mexico",
|
|
253
|
+
"react-native-colombia",
|
|
254
|
+
"react-native-argentina",
|
|
255
|
+
"react-native-espana",
|
|
256
|
+
"herramientas-desarrollador-movil",
|
|
257
|
+
"netzwerk-logger",
|
|
258
|
+
"entwicklertools",
|
|
259
|
+
"in-app-debugger-deutsch",
|
|
260
|
+
"paketmitschnitt",
|
|
261
|
+
"in-app-debugger-deutschland",
|
|
262
|
+
"netzwerk-mitschnitt",
|
|
263
|
+
"chucker-alternative-deutsch",
|
|
264
|
+
"fehlersuche-mobil",
|
|
265
|
+
"react-native-entwickler",
|
|
266
|
+
"speicher-inspektor",
|
|
267
|
+
"react-native-schweiz",
|
|
268
|
+
"react-native-oesterreich",
|
|
269
|
+
"debogueur-react-native",
|
|
270
|
+
"inspecteur-reseau",
|
|
271
|
+
"outils-developpement",
|
|
272
|
+
"capture-paquets-mobile",
|
|
273
|
+
"inspecteur-reseau-france",
|
|
274
|
+
"debogueur-mobile-france",
|
|
275
|
+
"alternative-flipper",
|
|
276
|
+
"journal-reseau",
|
|
277
|
+
"analyseur-reseau-mobile",
|
|
278
|
+
"depannage-mobile-react-native",
|
|
279
|
+
"depurador-mobile",
|
|
280
|
+
"inspetor-de-rede",
|
|
281
|
+
"ferramentas-dev",
|
|
282
|
+
"depurador-react-native-brasil",
|
|
283
|
+
"captura-de-pacotes",
|
|
284
|
+
"editor-de-storage-mobile",
|
|
285
|
+
"react-native-brasil",
|
|
286
|
+
"react-native-portugal",
|
|
287
|
+
"monitor-de-rede-mobile",
|
|
288
|
+
"리액트네이티브",
|
|
289
|
+
"디버거",
|
|
290
|
+
"네트워크로거",
|
|
291
|
+
"모바일디버깅",
|
|
292
|
+
"패킷캡처",
|
|
293
|
+
"플리퍼대체",
|
|
294
|
+
"리액트네이티브디버깅",
|
|
295
|
+
"모바일네트워크로거",
|
|
296
|
+
"차커대체",
|
|
297
|
+
"찰스프록시대체",
|
|
298
|
+
"인앱디버거",
|
|
299
|
+
"웹소켓로거",
|
|
300
|
+
"단말기디버거",
|
|
301
|
+
"모바일개발도구",
|
|
302
|
+
"отладчик-react-native",
|
|
303
|
+
"сниффер-сети",
|
|
304
|
+
"логирование-сети",
|
|
305
|
+
"альтернатива-flipper",
|
|
306
|
+
"перехватчик-трафика",
|
|
307
|
+
"мобильная-отладка",
|
|
308
|
+
"инспектор-сети",
|
|
309
|
+
"отладка-приложений-react-native",
|
|
310
|
+
"فاحص-الشبكة-رياكت-نيتف",
|
|
311
|
+
"مصحح-أخطاء-الموبايل",
|
|
312
|
+
"مراقب-الشبكة",
|
|
313
|
+
"بديل-فليبر",
|
|
314
|
+
"أدوات-مطور-رياكت-نيتف",
|
|
315
|
+
"فاحص-الشبكة-المحمول",
|
|
316
|
+
"تسجيل-حزم-البيانات",
|
|
317
|
+
"debugger-react-native-italia",
|
|
318
|
+
"ispettore-di-rete",
|
|
319
|
+
"strumenti-sviluppo-mobile",
|
|
320
|
+
"cattura-traffico-mobile",
|
|
321
|
+
"alternativa-flipper-italia",
|
|
322
|
+
"registro-chiamate-rete",
|
|
323
|
+
"netwerk-inspecteur-nederlands",
|
|
324
|
+
"netwerk-logger-nederland",
|
|
325
|
+
"mobiele-debugger",
|
|
326
|
+
"react-native-ontwikkelaar",
|
|
327
|
+
"pakket-sniffer-mobiel",
|
|
328
|
+
"flipper-alternatief-nederland",
|
|
329
|
+
"debuger-react-native-polska",
|
|
330
|
+
"inspektor-sieci-mobilnej",
|
|
331
|
+
"narzedzia-programistyczne",
|
|
332
|
+
"rejestrator-pakietow",
|
|
333
|
+
"rejestrator-sieci-react-native-polska",
|
|
334
|
+
"inspektor-aplikacji-mobilnych",
|
|
335
|
+
"ag-gunlukcusu-turkce",
|
|
336
|
+
"hata-ayiklayici",
|
|
337
|
+
"ag-denetleyicisi",
|
|
338
|
+
"flipper-alternatifi",
|
|
339
|
+
"react-native-gelistirici-araclari",
|
|
340
|
+
"mobil-paket-yakalama",
|
|
341
|
+
"alat-debug-react-native-indonesia",
|
|
342
|
+
"pelacak-jaringan-mobile",
|
|
343
|
+
"inspektur-jaringan",
|
|
344
|
+
"alternatif-flipper",
|
|
345
|
+
"pelacak-jaringan-aplikasi",
|
|
346
|
+
"debug-mobile-indonesia",
|
|
347
|
+
"kiem-tra-mang-react-native-vietnam",
|
|
348
|
+
"ghi-log-mang-mobile",
|
|
349
|
+
"cong-cu-debug-ung-dung",
|
|
350
|
+
"thay-the-flipper",
|
|
351
|
+
"bat-goi-tin-mang-react-native",
|
|
352
|
+
"phan-tich-luu-luong-mang",
|
|
353
|
+
"ดีบักเกอร์-react-native-thai",
|
|
354
|
+
"เครื่องมือตรวจสอบเครือข่าย",
|
|
355
|
+
"เครื่องมือบันทึกเน็ตเวิร์ก",
|
|
356
|
+
"ทางเลือก-flipper",
|
|
357
|
+
"ตัวดักจับแพ็กเก็ต-react-native",
|
|
358
|
+
"เครื่องมือนักพัฒนาไทย",
|
|
359
|
+
"налагоджувач-react-native-україна",
|
|
360
|
+
"логер-мережі",
|
|
361
|
+
"інструменти-розробника-react-native",
|
|
362
|
+
"natverkslogg-sverige",
|
|
363
|
+
"felsokare-react-native",
|
|
364
|
+
"utvecklarverktyg-react-native",
|
|
365
|
+
"tagasuri-ng-network-react-native",
|
|
366
|
+
"mobile-network-logger-ph",
|
|
367
|
+
"react-native-philippines",
|
|
368
|
+
"מנפה-שגיאות-אפליקציות",
|
|
369
|
+
"ניטור-רשת-מובייל",
|
|
370
|
+
"כלי-פיתוח-ריאקט-נייטיב",
|
|
371
|
+
"react-native-india",
|
|
372
|
+
"नेटवर्क-लॉगर",
|
|
373
|
+
"डिबगिंग-टूल",
|
|
374
|
+
"मोबाइल-ऐप-डिबगिंग",
|
|
375
|
+
"इन-ऐप-इंस्पेक्टर",
|
|
376
|
+
"வலைப்பின்னல்-பதிவர்",
|
|
377
|
+
"நெட்வொர்க்-இன்ஸ்பெக்டர்",
|
|
378
|
+
"வலைப்பின்னல்-ஆய்வாளர்",
|
|
379
|
+
"நெట్వర్క్-లాగర్",
|
|
380
|
+
"నెట్వర్క్-ఇన్స్పెక్టర్",
|
|
381
|
+
"ನೆಟ್ವರ್ಕ್-ಲಾಗರ್",
|
|
382
|
+
"ನೆಟ್ವರ್ಕ್-ಇನ್ಸ್ಪೆಕ್ಟರ್",
|
|
383
|
+
"നെറ്റ്വർക്ക്-ലോഗർ",
|
|
384
|
+
"നെറ്റ്വർക്ക്-ഇൻസ്പെക്ടർ",
|
|
385
|
+
"নেটওয়ার্ক-লগার",
|
|
386
|
+
"মোবাইল-ডিবাগার",
|
|
387
|
+
"नेटवर्क-लॉगर-मराठी",
|
|
388
|
+
"react-native-bangalore",
|
|
389
|
+
"react-native-hyderabad",
|
|
390
|
+
"react-native-pune",
|
|
391
|
+
"mobile-devtools-global"
|
|
190
392
|
],
|
|
191
393
|
"author": "Vengateswaran Balakrishnan",
|
|
192
394
|
"contributors": [
|
|
@@ -457,11 +457,19 @@ export interface ScreenshotResult {
|
|
|
457
457
|
}
|
|
458
458
|
|
|
459
459
|
export interface RecordingOptions {
|
|
460
|
+
/** Output format: 'mp4' (H.264) or 'gif' (animated GIF). Default: 'mp4' */
|
|
460
461
|
format?: 'mp4' | 'gif';
|
|
462
|
+
/** Audio source: 'none' (muted), 'app' (in-app audio), 'mic' (microphone), 'mixed'. Default: 'none' */
|
|
461
463
|
audioSource?: 'none' | 'app' | 'mic' | 'mixed';
|
|
464
|
+
/** Target frames per second: 5–60. Default: 30 */
|
|
462
465
|
fps?: number;
|
|
466
|
+
/** Resolution scale factor: 0.2–1.0. Lower = smaller file, less CPU. Default: 0.5 */
|
|
467
|
+
scale?: number;
|
|
468
|
+
/** H.264 encoding bitrate in bits/sec. 0 = auto (adaptive to resolution). Default: auto */
|
|
463
469
|
bitrate?: number;
|
|
470
|
+
/** Maximum recording duration in seconds: 5–300. Default: 120 */
|
|
464
471
|
maxDurationSeconds?: number;
|
|
472
|
+
/** Temporarily hide inspector overlay during recording. Default: false */
|
|
465
473
|
hideInspector?: boolean;
|
|
466
474
|
}
|
|
467
475
|
|