react-native-nitro-fetch 1.4.0 → 1.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.
@@ -1,183 +1,175 @@
1
1
  import { generateCurl } from './CurlGenerator';
2
2
  class NetworkInspectorImpl {
3
- _enabled = false;
4
- _entries = [];
5
- _maxEntries = 500;
6
- _maxBodyCapture = 4096;
7
- _listeners = new Set();
8
- enable(options) {
9
- this._enabled = true;
10
- if (options?.maxEntries != null)
11
- this._maxEntries = options.maxEntries;
12
- if (options?.maxBodyCapture != null)
13
- this._maxBodyCapture = options.maxBodyCapture;
14
- }
15
- disable() {
16
- this._enabled = false;
17
- }
18
- isEnabled() {
19
- return this._enabled;
20
- }
21
- getEntries() {
22
- return this._entries;
23
- }
24
- getHttpEntries() {
25
- return this._entries.filter((e) => e.type === 'http');
26
- }
27
- getWebSocketEntries() {
28
- return this._entries.filter((e) => e.type === 'websocket');
29
- }
30
- getEntry(id) {
31
- return this._entries.find((e) => e.id === id);
32
- }
33
- clear() {
34
- this._entries = [];
35
- }
36
- onEntry(callback) {
37
- this._listeners.add(callback);
38
- return () => {
39
- this._listeners.delete(callback);
40
- };
41
- }
42
- _notify(entry) {
43
- for (const cb of this._listeners) {
44
- try {
45
- cb(entry);
46
- }
47
- catch {
48
- // swallow listener errors
49
- }
50
- }
51
- }
52
- _trimEntries() {
53
- if (this._entries.length > this._maxEntries) {
54
- this._entries.shift();
55
- }
56
- }
57
- // --- HTTP recording ---
58
- _recordStart(id, url, method, headers, body) {
59
- if (!this._enabled)
60
- return;
61
- const bodySize = body ? body.length : 0;
62
- const entry = {
63
- id,
64
- type: 'http',
65
- url,
66
- method,
67
- requestHeaders: headers.map((h) => ({ key: h.key, value: h.value })),
68
- requestBody: body ? body.slice(0, this._maxBodyCapture) : undefined,
69
- requestBodySize: bodySize,
70
- status: 0,
71
- statusText: '',
72
- responseHeaders: [],
73
- responseBodySize: 0,
74
- startTime: performance.now(),
75
- endTime: 0,
76
- duration: 0,
77
- curl: generateCurl({ url, method, headers, body }),
78
- };
79
- this._entries.push(entry);
80
- this._trimEntries();
81
- }
82
- _recordEnd(id, status, statusText, headers, bodySize, error, responseBody) {
83
- if (!this._enabled)
84
- return;
85
- const entry = this._entries.find((e) => e.id === id && e.type === 'http');
86
- if (!entry)
87
- return;
88
- entry.status = status;
89
- entry.statusText = statusText;
90
- entry.responseHeaders = headers.map((h) => ({
91
- key: h.key,
92
- value: h.value,
93
- }));
94
- entry.responseBodySize = bodySize;
95
- entry.endTime = performance.now();
96
- entry.duration = entry.endTime - entry.startTime;
97
- if (error)
98
- entry.error = error;
99
- if (responseBody != null) {
100
- entry.responseBody = responseBody.slice(0, this._maxBodyCapture);
101
- }
102
- this._notify(entry);
103
- }
104
- // --- WebSocket recording ---
105
- _recordWsOpen(id, url, protocols, headers) {
106
- if (!this._enabled)
107
- return;
108
- const entry = {
109
- id,
110
- type: 'websocket',
111
- url,
112
- protocols,
113
- requestHeaders: headers.map((h) => ({ key: h.key, value: h.value })),
114
- startTime: performance.now(),
115
- endTime: 0,
116
- duration: 0,
117
- readyState: 'CONNECTING',
118
- messages: [],
119
- messagesSent: 0,
120
- messagesReceived: 0,
121
- bytesSent: 0,
122
- bytesReceived: 0,
123
- };
124
- this._entries.push(entry);
125
- this._trimEntries();
126
- this._notify(entry);
127
- }
128
- _recordWsConnected(id) {
129
- if (!this._enabled)
130
- return;
131
- const entry = this._entries.find((e) => e.id === id && e.type === 'websocket');
132
- if (!entry)
133
- return;
134
- entry.readyState = 'OPEN';
135
- this._notify(entry);
136
- }
137
- _recordWsMessage(id, direction, data, size, isBinary) {
138
- if (!this._enabled)
139
- return;
140
- const entry = this._entries.find((e) => e.id === id && e.type === 'websocket');
141
- if (!entry)
142
- return;
143
- entry.messages.push({
144
- direction,
145
- data: data.slice(0, this._maxBodyCapture),
146
- size,
147
- isBinary,
148
- timestamp: performance.now(),
149
- });
150
- if (direction === 'sent') {
151
- entry.messagesSent++;
152
- entry.bytesSent += size;
153
- }
154
- else {
155
- entry.messagesReceived++;
156
- entry.bytesReceived += size;
157
- }
158
- this._notify(entry);
159
- }
160
- _recordWsClose(id, code, reason) {
161
- if (!this._enabled)
162
- return;
163
- const entry = this._entries.find((e) => e.id === id && e.type === 'websocket');
164
- if (!entry)
165
- return;
166
- entry.readyState = 'CLOSED';
167
- entry.closeCode = code;
168
- entry.closeReason = reason;
169
- entry.endTime = performance.now();
170
- entry.duration = entry.endTime - entry.startTime;
171
- this._notify(entry);
172
- }
173
- _recordWsError(id, error) {
174
- if (!this._enabled)
175
- return;
176
- const entry = this._entries.find((e) => e.id === id && e.type === 'websocket');
177
- if (!entry)
178
- return;
179
- entry.error = error;
180
- this._notify(entry);
181
- }
3
+ _enabled = false;
4
+ _entries = [];
5
+ _maxEntries = 500;
6
+ _maxBodyCapture = 4096;
7
+ _listeners = new Set();
8
+ enable(options) {
9
+ this._enabled = true;
10
+ if (options?.maxEntries != null) this._maxEntries = options.maxEntries;
11
+ if (options?.maxBodyCapture != null)
12
+ this._maxBodyCapture = options.maxBodyCapture;
13
+ }
14
+ disable() {
15
+ this._enabled = false;
16
+ }
17
+ isEnabled() {
18
+ return this._enabled;
19
+ }
20
+ getEntries() {
21
+ return this._entries;
22
+ }
23
+ getHttpEntries() {
24
+ return this._entries.filter((e) => e.type === 'http');
25
+ }
26
+ getWebSocketEntries() {
27
+ return this._entries.filter((e) => e.type === 'websocket');
28
+ }
29
+ getEntry(id) {
30
+ return this._entries.find((e) => e.id === id);
31
+ }
32
+ clear() {
33
+ this._entries = [];
34
+ }
35
+ onEntry(callback) {
36
+ this._listeners.add(callback);
37
+ return () => {
38
+ this._listeners.delete(callback);
39
+ };
40
+ }
41
+ _notify(entry) {
42
+ for (const cb of this._listeners) {
43
+ try {
44
+ cb(entry);
45
+ } catch {
46
+ // swallow listener errors
47
+ }
48
+ }
49
+ }
50
+ _trimEntries() {
51
+ if (this._entries.length > this._maxEntries) {
52
+ this._entries.shift();
53
+ }
54
+ }
55
+ // --- HTTP recording ---
56
+ _recordStart(id, url, method, headers, body) {
57
+ if (!this._enabled) return;
58
+ const bodySize = body ? body.length : 0;
59
+ const entry = {
60
+ id,
61
+ type: 'http',
62
+ url,
63
+ method,
64
+ requestHeaders: headers.map((h) => ({ key: h.key, value: h.value })),
65
+ requestBody: body ? body.slice(0, this._maxBodyCapture) : undefined,
66
+ requestBodySize: bodySize,
67
+ status: 0,
68
+ statusText: '',
69
+ responseHeaders: [],
70
+ responseBodySize: 0,
71
+ startTime: performance.now(),
72
+ endTime: 0,
73
+ duration: 0,
74
+ curl: generateCurl({ url, method, headers, body }),
75
+ };
76
+ this._entries.push(entry);
77
+ this._trimEntries();
78
+ }
79
+ _recordEnd(id, status, statusText, headers, bodySize, error, responseBody) {
80
+ if (!this._enabled) return;
81
+ const entry = this._entries.find((e) => e.id === id && e.type === 'http');
82
+ if (!entry) return;
83
+ entry.status = status;
84
+ entry.statusText = statusText;
85
+ entry.responseHeaders = headers.map((h) => ({
86
+ key: h.key,
87
+ value: h.value,
88
+ }));
89
+ entry.responseBodySize = bodySize;
90
+ entry.endTime = performance.now();
91
+ entry.duration = entry.endTime - entry.startTime;
92
+ if (error) entry.error = error;
93
+ if (responseBody != null) {
94
+ entry.responseBody = responseBody.slice(0, this._maxBodyCapture);
95
+ }
96
+ this._notify(entry);
97
+ }
98
+ // --- WebSocket recording ---
99
+ _recordWsOpen(id, url, protocols, headers) {
100
+ if (!this._enabled) return;
101
+ const entry = {
102
+ id,
103
+ type: 'websocket',
104
+ url,
105
+ protocols,
106
+ requestHeaders: headers.map((h) => ({ key: h.key, value: h.value })),
107
+ startTime: performance.now(),
108
+ endTime: 0,
109
+ duration: 0,
110
+ readyState: 'CONNECTING',
111
+ messages: [],
112
+ messagesSent: 0,
113
+ messagesReceived: 0,
114
+ bytesSent: 0,
115
+ bytesReceived: 0,
116
+ };
117
+ this._entries.push(entry);
118
+ this._trimEntries();
119
+ this._notify(entry);
120
+ }
121
+ _recordWsConnected(id) {
122
+ if (!this._enabled) return;
123
+ const entry = this._entries.find(
124
+ (e) => e.id === id && e.type === 'websocket'
125
+ );
126
+ if (!entry) return;
127
+ entry.readyState = 'OPEN';
128
+ this._notify(entry);
129
+ }
130
+ _recordWsMessage(id, direction, data, size, isBinary) {
131
+ if (!this._enabled) return;
132
+ const entry = this._entries.find(
133
+ (e) => e.id === id && e.type === 'websocket'
134
+ );
135
+ if (!entry) return;
136
+ entry.messages.push({
137
+ direction,
138
+ data: data.slice(0, this._maxBodyCapture),
139
+ size,
140
+ isBinary,
141
+ timestamp: performance.now(),
142
+ });
143
+ if (direction === 'sent') {
144
+ entry.messagesSent++;
145
+ entry.bytesSent += size;
146
+ } else {
147
+ entry.messagesReceived++;
148
+ entry.bytesReceived += size;
149
+ }
150
+ this._notify(entry);
151
+ }
152
+ _recordWsClose(id, code, reason) {
153
+ if (!this._enabled) return;
154
+ const entry = this._entries.find(
155
+ (e) => e.id === id && e.type === 'websocket'
156
+ );
157
+ if (!entry) return;
158
+ entry.readyState = 'CLOSED';
159
+ entry.closeCode = code;
160
+ entry.closeReason = reason;
161
+ entry.endTime = performance.now();
162
+ entry.duration = entry.endTime - entry.startTime;
163
+ this._notify(entry);
164
+ }
165
+ _recordWsError(id, error) {
166
+ if (!this._enabled) return;
167
+ const entry = this._entries.find(
168
+ (e) => e.id === id && e.type === 'websocket'
169
+ );
170
+ if (!entry) return;
171
+ entry.error = error;
172
+ this._notify(entry);
173
+ }
182
174
  }
183
175
  export const NetworkInspector = new NetworkInspectorImpl();
@@ -3,4 +3,5 @@ import { NitroModules } from 'react-native-nitro-modules';
3
3
  export const NitroFetch = NitroModules.createHybridObject('NitroFetch');
4
4
  export const NativeStorage = NitroModules.createHybridObject('NativeStorage');
5
5
  export const boxedNitroFetch = NitroModules.box(NitroFetch);
6
- export const NitroCronetSingleton = NitroModules.createHybridObject('NitroCronet');
6
+ export const NitroCronetSingleton =
7
+ NitroModules.createHybridObject('NitroCronet');