11# React Native API Debugger
22
3- A network request debugging tool for React Native applications. Monitor, inspect, and debug HTTP requests with a draggable overlay interface.
3+ A comprehensive network debugging tool for React Native applications. Monitor, inspect, and debug HTTP requests and WebSocket connections with a unified tabbed overlay interface.
44
55[ ![ npm version] ( https://img.shields.io/npm/v/react-native-api-debugger )] ( https://www.npmjs.com/package/react-native-api-debugger )
66[ ![ downloads] ( https://img.shields.io/npm/dm/react-native-api-debugger )] ( https://www.npmjs.com/package/react-native-api-debugger )
@@ -10,16 +10,29 @@ A network request debugging tool for React Native applications. Monitor, inspect
1010
1111## Features
1212
13+ ### HTTP Debugging
1314- ** Network Interception** - Automatically captures all ` fetch() ` and ` XMLHttpRequest ` calls
14- - ** Draggable Overlay** - Floating button that can be positioned anywhere on screen
1515- ** Request Details** - View headers, body, response, timing, and status codes
1616- ** cURL Export** - Copy requests as cURL commands
1717- ** Advanced Filtering** - Filter by status code (2xx, 3xx, 4xx, 5xx), search by URL/method/body
1818- ** Export Logs** - Export to HAR, Postman Collection, or JSON formats
1919- ** Request Replay** - Re-execute captured requests with optional modifications
20- - ** Dark/Light Theme** - Toggle between themes
2120- ** Slow Request Detection** - Visual indicator for requests exceeding threshold
2221- ** Sensitive Data Redaction** - Detect and mask sensitive headers and body fields
22+
23+ ### WebSocket Debugging
24+ - ** WebSocket Interception** - Automatically captures all WebSocket connections
25+ - ** Connection Monitoring** - Track connection state (connecting, open, closing, closed)
26+ - ** Message Logging** - View sent and received messages with timestamps
27+ - ** Message Filtering** - Filter by direction (sent/received) or search by content
28+ - ** Binary Support** - Handles text and binary message types
29+ - ** Connection Metrics** - Track message counts, bytes transferred, and connection duration
30+ - ** Live Indicators** - Visual indicators for active connections
31+
32+ ### General
33+ - ** Unified Interface** - Tabbed modal with HTTP and WebSocket views
34+ - ** Draggable Overlay** - Floating button that can be positioned anywhere on screen
35+ - ** Dark/Light Theme** - Toggle between themes
2336- ** Individual Log Deletion** - Remove specific entries without clearing all logs
2437- ** Device Shake Support** - Shake to show/hide the debugger
2538- ** TypeScript Support** - Full type definitions included
@@ -67,7 +80,7 @@ npm install react-native-svg
6780
6881## Quick Setup
6982
70- ### 1. Basic Usage (No Dependencies )
83+ ### 1. Basic Usage (HTTP Only )
7184
7285``` tsx
7386import React , { useEffect } from ' react' ;
@@ -94,17 +107,59 @@ export default function App() {
94107}
95108```
96109
97- ### 2. With Draggable Button
110+ ### 2. Full Setup (HTTP + WebSocket)
111+
112+ Use ` NetworkLoggerOverlay ` with ` enableWebSocket={true} ` for the unified tabbed interface.
113+
114+ ``` tsx
115+ import React , { useEffect } from ' react' ;
116+ import { View } from ' react-native' ;
117+ import {
118+ networkLogger ,
119+ webSocketLogger ,
120+ NetworkLoggerOverlay
121+ } from ' react-native-api-debugger' ;
122+
123+ export default function App() {
124+ useEffect (() => {
125+ // Setup HTTP interceptor
126+ networkLogger .setupInterceptor ();
127+
128+ // Setup WebSocket interceptor
129+ webSocketLogger .setupInterceptor ();
130+ }, []);
131+
132+ return (
133+ <View style = { { flex: 1 }} >
134+ { /* Your app content */ }
135+
136+ <NetworkLoggerOverlay
137+ networkLogger = { networkLogger }
138+ webSocketLogger = { webSocketLogger }
139+ enableWebSocket = { true }
140+ draggable = { false }
141+ />
142+ </View >
143+ );
144+ }
145+ ```
146+
147+ ### 3. With Draggable Button
98148
99149Requires ` react-native-gesture-handler ` and ` react-native-reanimated ` .
100150
101151``` tsx
102152import { GestureHandlerRootView } from ' react-native-gesture-handler' ;
103- import { networkLogger , NetworkLoggerOverlay } from ' react-native-api-debugger' ;
153+ import {
154+ networkLogger ,
155+ webSocketLogger ,
156+ NetworkLoggerOverlay
157+ } from ' react-native-api-debugger' ;
104158
105159export default function App() {
106160 useEffect (() => {
107161 networkLogger .setupInterceptor ();
162+ webSocketLogger .setupInterceptor ();
108163 }, []);
109164
110165 return (
@@ -113,24 +168,28 @@ export default function App() {
113168
114169 <NetworkLoggerOverlay
115170 networkLogger = { networkLogger }
171+ webSocketLogger = { webSocketLogger }
172+ enableWebSocket = { true }
116173 draggable = { true }
117174 />
118175 </GestureHandlerRootView >
119176 );
120177}
121178```
122179
123- ### 3 . Full Featured Setup
180+ ### 4 . Full Featured Setup
124181
125182``` tsx
126183<NetworkLoggerOverlay
127184 networkLogger = { networkLogger }
185+ webSocketLogger = { webSocketLogger }
186+ enableWebSocket = { true }
128187 draggable = { true }
129188 enableDeviceShake = { true }
130189 useCopyToClipboard = { true }
131190 showRequestHeader = { true }
132191 showResponseHeader = { true }
133- theme = " light "
192+ theme = " dark "
134193 onThemeChange = { (theme ) => console .log (' Theme:' , theme )}
135194/>
136195```
@@ -197,11 +256,18 @@ const config = networkLogger.getConfig();
197256
198257``` tsx
199258useEffect (() => {
200- const unsubscribe = networkLogger .subscribe ((logs ) => {
201- console .log (' Logs updated:' , logs .length );
259+ const unsubscribeHttp = networkLogger .subscribe ((logs ) => {
260+ console .log (' HTTP logs updated:' , logs .length );
261+ });
262+
263+ const unsubscribeWs = webSocketLogger .subscribe ((logs ) => {
264+ console .log (' WebSocket logs updated:' , logs .length );
202265 });
203266
204- return () => unsubscribe ();
267+ return () => {
268+ unsubscribeHttp ();
269+ unsubscribeWs ();
270+ };
205271}, []);
206272```
207273
@@ -273,16 +339,62 @@ const curlCommand = generateCurl(log);
273339// curl -X POST 'https://api.example.com/users' -H 'Content-Type: application/json' -d '{"name":"John"}'
274340```
275341
342+ ### WebSocket Logger Methods
343+
344+ ``` tsx
345+ import { webSocketLogger } from ' react-native-api-debugger' ;
346+
347+ // Initialize interception
348+ webSocketLogger .setupInterceptor ();
349+
350+ // Configure options
351+ webSocketLogger .configure ({
352+ maxConnections: 50 , // Maximum connections to store
353+ captureMessages: true , // Log individual messages
354+ maxMessagesPerConnection: 100 , // Max messages per connection
355+ ignoredUrls: [' */health' ], // URL patterns to ignore
356+ });
357+
358+ // Get all logs
359+ const logs = webSocketLogger .getLogs ();
360+
361+ // Get log count
362+ const count = webSocketLogger .getLogCount ();
363+
364+ // Clear all logs
365+ webSocketLogger .clearLogs ();
366+
367+ // Delete a specific log
368+ webSocketLogger .deleteLog (logId );
369+
370+ // Close an active connection
371+ webSocketLogger .closeConnection (logId );
372+
373+ // Enable/disable logging
374+ webSocketLogger .enable ();
375+ webSocketLogger .disable ();
376+
377+ // Get active connections count
378+ const activeCount = webSocketLogger .getActiveConnectionsCount ();
379+
380+ // Restore original WebSocket (remove interception)
381+ webSocketLogger .restoreInterceptor ();
382+ ```
383+
276384---
277385
278386## API Reference
279387
280388### NetworkLoggerOverlay Props
281389
390+ The unified overlay component with HTTP and optional WebSocket tabs.
391+
282392| Prop | Type | Default | Description |
283393| ------| ------| ---------| -------------|
284- | ` networkLogger ` | ` NetworkLogger ` | Required | The logger instance |
394+ | ` networkLogger ` | ` NetworkLogger ` | Required | HTTP logger instance |
395+ | ` webSocketLogger ` | ` WebSocketLogger ` | - | WebSocket logger instance (required if ` enableWebSocket ` is true) |
285396| ` enabled ` | ` boolean ` | ` __DEV__ ` | Enable/disable the overlay |
397+ | ` enableWebSocket ` | ` boolean ` | ` false ` | Enable WebSocket debugging tab |
286398| ` draggable ` | ` boolean ` | ` false ` | Enable draggable button |
287399| ` enableDeviceShake ` | ` boolean ` | ` false ` | Show on device shake |
288400| ` useCopyToClipboard ` | ` boolean ` | ` false ` | Enable clipboard copy |
@@ -328,6 +440,46 @@ interface NetworkLog {
328440}
329441```
330442
443+ ### WebSocketLog Type
444+
445+ ``` typescript
446+ interface WebSocketLog {
447+ id: number ;
448+ url: string ;
449+ state: ' connecting' | ' open' | ' closing' | ' closed' ;
450+ protocols? : string [];
451+ connectTime: string ;
452+ openTime? : string ;
453+ closeTime? : string ;
454+ closeCode? : number ;
455+ closeReason? : string ;
456+ error? : string ;
457+ handshakeDuration? : number ;
458+ messages: WebSocketMessage [];
459+ messageCount: { sent: number ; received: number };
460+ bytesReceived: number ;
461+ bytesSent: number ;
462+ }
463+
464+ interface WebSocketMessage {
465+ id: number ;
466+ direction: ' sent' | ' received' ;
467+ data: string ;
468+ dataType: ' text' | ' binary' ;
469+ timestamp: string ;
470+ size: number ;
471+ }
472+ ```
473+
474+ ### WebSocketLoggerConfig
475+
476+ | Option | Type | Default | Description |
477+ | --------| ------| ---------| -------------|
478+ | ` maxConnections ` | ` number ` | ` 100 ` | Maximum connections to store |
479+ | ` captureMessages ` | ` boolean ` | ` true ` | Log individual messages |
480+ | ` maxMessagesPerConnection ` | ` number ` | ` 100 ` | Max messages per connection |
481+ | ` ignoredUrls ` | ` string[] ` | ` [] ` | URL patterns to ignore |
482+
331483---
332484
333485## Production Safety
@@ -383,9 +535,35 @@ Make sure `setupInterceptor()` is called before any network requests:
383535``` tsx
384536useEffect (() => {
385537 networkLogger .setupInterceptor ();
538+ webSocketLogger .setupInterceptor ();
386539}, []); // Empty dependency array - runs once on mount
387540```
388541
542+ ### WebSocket connections not appearing
543+
544+ Ensure you have:
545+ 1 . Called ` webSocketLogger.setupInterceptor() ` before any WebSocket connections
546+ 2 . Set ` enableWebSocket={true} ` on the NetworkLoggerOverlay
547+ 3 . Passed the ` webSocketLogger ` prop
548+
549+ ``` tsx
550+ <NetworkLoggerOverlay
551+ networkLogger = { networkLogger }
552+ webSocketLogger = { webSocketLogger }
553+ enableWebSocket = { true } // Required to show WebSocket tab
554+ draggable = { true }
555+ />
556+ ```
557+
558+ ### Setup error messages
559+
560+ The debugger will throw helpful error messages if interceptors aren't initialized:
561+
562+ - ** HTTP** : If ` networkLogger.setupInterceptor() ` wasn't called before rendering
563+ - ** WebSocket** : If ` enableWebSocket={true} ` but ` webSocketLogger.setupInterceptor() ` wasn't called
564+
565+ These errors include code examples to help you fix the issue quickly.
566+
389567---
390568
391569## Contributing
0 commit comments