react-native-network-lens 0.0.0-stage → 0.1.0

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 (180) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +207 -2
  3. package/lib/module/backHandler.js +31 -0
  4. package/lib/module/backHandler.js.map +1 -0
  5. package/lib/module/components/BodyViewer.js +207 -0
  6. package/lib/module/components/BodyViewer.js.map +1 -0
  7. package/lib/module/components/CodeList.js +104 -0
  8. package/lib/module/components/CodeList.js.map +1 -0
  9. package/lib/module/components/JsonTree/JsonTreeView.js +206 -0
  10. package/lib/module/components/JsonTree/JsonTreeView.js.map +1 -0
  11. package/lib/module/components/JsonTree/model.js +194 -0
  12. package/lib/module/components/JsonTree/model.js.map +1 -0
  13. package/lib/module/components/NetworkLens.js +110 -0
  14. package/lib/module/components/NetworkLens.js.map +1 -0
  15. package/lib/module/components/NetworkLensOverlay.js +158 -0
  16. package/lib/module/components/NetworkLensOverlay.js.map +1 -0
  17. package/lib/module/components/RawTextView.js +119 -0
  18. package/lib/module/components/RawTextView.js.map +1 -0
  19. package/lib/module/components/RequestDetails/RequestDetails.js +251 -0
  20. package/lib/module/components/RequestDetails/RequestDetails.js.map +1 -0
  21. package/lib/module/components/RequestList/FilterBar.js +138 -0
  22. package/lib/module/components/RequestList/FilterBar.js.map +1 -0
  23. package/lib/module/components/RequestList/RequestList.js +163 -0
  24. package/lib/module/components/RequestList/RequestList.js.map +1 -0
  25. package/lib/module/components/RequestList/RequestRow.js +161 -0
  26. package/lib/module/components/RequestList/RequestRow.js.map +1 -0
  27. package/lib/module/components/RequestList/filters.js +57 -0
  28. package/lib/module/components/RequestList/filters.js.map +1 -0
  29. package/lib/module/components/ui/ActionSheet.js +94 -0
  30. package/lib/module/components/ui/ActionSheet.js.map +1 -0
  31. package/lib/module/components/ui/Button.js +90 -0
  32. package/lib/module/components/ui/Button.js.map +1 -0
  33. package/lib/module/components/ui/Pill.js +53 -0
  34. package/lib/module/components/ui/Pill.js.map +1 -0
  35. package/lib/module/components/ui/SearchInput.js +77 -0
  36. package/lib/module/components/ui/SearchInput.js.map +1 -0
  37. package/lib/module/components/ui/Section.js +147 -0
  38. package/lib/module/components/ui/Section.js.map +1 -0
  39. package/lib/module/components/ui/SegmentedControl.js +65 -0
  40. package/lib/module/components/ui/SegmentedControl.js.map +1 -0
  41. package/lib/module/components/ui/index.js +9 -0
  42. package/lib/module/components/ui/index.js.map +1 -0
  43. package/lib/module/core/Logger.js +230 -0
  44. package/lib/module/core/Logger.js.map +1 -0
  45. package/lib/module/core/NetworkRequest.js +155 -0
  46. package/lib/module/core/NetworkRequest.js.map +1 -0
  47. package/lib/module/core/XHRInterceptor.js +104 -0
  48. package/lib/module/core/XHRInterceptor.js.map +1 -0
  49. package/lib/module/core/har.js +72 -0
  50. package/lib/module/core/har.js.map +1 -0
  51. package/lib/module/core/loggerSingleton.js +12 -0
  52. package/lib/module/core/loggerSingleton.js.map +1 -0
  53. package/lib/module/hooks.js +42 -0
  54. package/lib/module/hooks.js.map +1 -0
  55. package/lib/module/index.js +34 -0
  56. package/lib/module/index.js.map +1 -0
  57. package/lib/module/package.json +1 -0
  58. package/lib/module/theme.js +136 -0
  59. package/lib/module/theme.js.map +1 -0
  60. package/lib/module/types.js +2 -0
  61. package/lib/module/types.js.map +1 -0
  62. package/lib/module/utils/body.js +179 -0
  63. package/lib/module/utils/body.js.map +1 -0
  64. package/lib/module/utils/debounce.js +18 -0
  65. package/lib/module/utils/debounce.js.map +1 -0
  66. package/lib/module/utils/format.js +45 -0
  67. package/lib/module/utils/format.js.map +1 -0
  68. package/lib/module/utils/logger.js +6 -0
  69. package/lib/module/utils/logger.js.map +1 -0
  70. package/lib/module/utils/search.js +70 -0
  71. package/lib/module/utils/search.js.map +1 -0
  72. package/lib/module/utils/url.js +50 -0
  73. package/lib/module/utils/url.js.map +1 -0
  74. package/lib/typescript/package.json +1 -0
  75. package/lib/typescript/src/backHandler.d.ts +15 -0
  76. package/lib/typescript/src/backHandler.d.ts.map +1 -0
  77. package/lib/typescript/src/components/BodyViewer.d.ts +16 -0
  78. package/lib/typescript/src/components/BodyViewer.d.ts.map +1 -0
  79. package/lib/typescript/src/components/CodeList.d.ts +21 -0
  80. package/lib/typescript/src/components/CodeList.d.ts.map +1 -0
  81. package/lib/typescript/src/components/JsonTree/JsonTreeView.d.ts +21 -0
  82. package/lib/typescript/src/components/JsonTree/JsonTreeView.d.ts.map +1 -0
  83. package/lib/typescript/src/components/JsonTree/model.d.ts +53 -0
  84. package/lib/typescript/src/components/JsonTree/model.d.ts.map +1 -0
  85. package/lib/typescript/src/components/NetworkLens.d.ts +31 -0
  86. package/lib/typescript/src/components/NetworkLens.d.ts.map +1 -0
  87. package/lib/typescript/src/components/NetworkLensOverlay.d.ts +32 -0
  88. package/lib/typescript/src/components/NetworkLensOverlay.d.ts.map +1 -0
  89. package/lib/typescript/src/components/RawTextView.d.ts +14 -0
  90. package/lib/typescript/src/components/RawTextView.d.ts.map +1 -0
  91. package/lib/typescript/src/components/RequestDetails/RequestDetails.d.ts +9 -0
  92. package/lib/typescript/src/components/RequestDetails/RequestDetails.d.ts.map +1 -0
  93. package/lib/typescript/src/components/RequestList/FilterBar.d.ts +12 -0
  94. package/lib/typescript/src/components/RequestList/FilterBar.d.ts.map +1 -0
  95. package/lib/typescript/src/components/RequestList/RequestList.d.ts +18 -0
  96. package/lib/typescript/src/components/RequestList/RequestList.d.ts.map +1 -0
  97. package/lib/typescript/src/components/RequestList/RequestRow.d.ts +11 -0
  98. package/lib/typescript/src/components/RequestList/RequestRow.d.ts.map +1 -0
  99. package/lib/typescript/src/components/RequestList/filters.d.ts +17 -0
  100. package/lib/typescript/src/components/RequestList/filters.d.ts.map +1 -0
  101. package/lib/typescript/src/components/ui/ActionSheet.d.ts +15 -0
  102. package/lib/typescript/src/components/ui/ActionSheet.d.ts.map +1 -0
  103. package/lib/typescript/src/components/ui/Button.d.ts +21 -0
  104. package/lib/typescript/src/components/ui/Button.d.ts.map +1 -0
  105. package/lib/typescript/src/components/ui/Pill.d.ts +11 -0
  106. package/lib/typescript/src/components/ui/Pill.d.ts.map +1 -0
  107. package/lib/typescript/src/components/ui/SearchInput.d.ts +17 -0
  108. package/lib/typescript/src/components/ui/SearchInput.d.ts.map +1 -0
  109. package/lib/typescript/src/components/ui/Section.d.ts +16 -0
  110. package/lib/typescript/src/components/ui/Section.d.ts.map +1 -0
  111. package/lib/typescript/src/components/ui/SegmentedControl.d.ts +14 -0
  112. package/lib/typescript/src/components/ui/SegmentedControl.d.ts.map +1 -0
  113. package/lib/typescript/src/components/ui/index.d.ts +7 -0
  114. package/lib/typescript/src/components/ui/index.d.ts.map +1 -0
  115. package/lib/typescript/src/core/Logger.d.ts +48 -0
  116. package/lib/typescript/src/core/Logger.d.ts.map +1 -0
  117. package/lib/typescript/src/core/NetworkRequest.d.ts +48 -0
  118. package/lib/typescript/src/core/NetworkRequest.d.ts.map +1 -0
  119. package/lib/typescript/src/core/XHRInterceptor.d.ts +29 -0
  120. package/lib/typescript/src/core/XHRInterceptor.d.ts.map +1 -0
  121. package/lib/typescript/src/core/har.d.ts +65 -0
  122. package/lib/typescript/src/core/har.d.ts.map +1 -0
  123. package/lib/typescript/src/core/loggerSingleton.d.ts +9 -0
  124. package/lib/typescript/src/core/loggerSingleton.d.ts.map +1 -0
  125. package/lib/typescript/src/hooks.d.ts +11 -0
  126. package/lib/typescript/src/hooks.d.ts.map +1 -0
  127. package/lib/typescript/src/index.d.ts +33 -0
  128. package/lib/typescript/src/index.d.ts.map +1 -0
  129. package/lib/typescript/src/theme.d.ts +49 -0
  130. package/lib/typescript/src/theme.d.ts.map +1 -0
  131. package/lib/typescript/src/types.d.ts +80 -0
  132. package/lib/typescript/src/types.d.ts.map +1 -0
  133. package/lib/typescript/src/utils/body.d.ts +19 -0
  134. package/lib/typescript/src/utils/body.d.ts.map +1 -0
  135. package/lib/typescript/src/utils/debounce.d.ts +4 -0
  136. package/lib/typescript/src/utils/debounce.d.ts.map +1 -0
  137. package/lib/typescript/src/utils/format.d.ts +7 -0
  138. package/lib/typescript/src/utils/format.d.ts.map +1 -0
  139. package/lib/typescript/src/utils/logger.d.ts +2 -0
  140. package/lib/typescript/src/utils/logger.d.ts.map +1 -0
  141. package/lib/typescript/src/utils/search.d.ts +17 -0
  142. package/lib/typescript/src/utils/search.d.ts.map +1 -0
  143. package/lib/typescript/src/utils/url.d.ts +15 -0
  144. package/lib/typescript/src/utils/url.d.ts.map +1 -0
  145. package/package.json +186 -4
  146. package/src/backHandler.ts +29 -0
  147. package/src/components/BodyViewer.tsx +240 -0
  148. package/src/components/CodeList.tsx +120 -0
  149. package/src/components/JsonTree/JsonTreeView.tsx +304 -0
  150. package/src/components/JsonTree/model.ts +264 -0
  151. package/src/components/NetworkLens.tsx +176 -0
  152. package/src/components/NetworkLensOverlay.tsx +187 -0
  153. package/src/components/RawTextView.tsx +163 -0
  154. package/src/components/RequestDetails/RequestDetails.tsx +313 -0
  155. package/src/components/RequestList/FilterBar.tsx +168 -0
  156. package/src/components/RequestList/RequestList.tsx +226 -0
  157. package/src/components/RequestList/RequestRow.tsx +150 -0
  158. package/src/components/RequestList/filters.ts +98 -0
  159. package/src/components/ui/ActionSheet.tsx +109 -0
  160. package/src/components/ui/Button.tsx +120 -0
  161. package/src/components/ui/Pill.tsx +53 -0
  162. package/src/components/ui/SearchInput.tsx +97 -0
  163. package/src/components/ui/Section.tsx +133 -0
  164. package/src/components/ui/SegmentedControl.tsx +79 -0
  165. package/src/components/ui/index.ts +6 -0
  166. package/src/core/Logger.ts +293 -0
  167. package/src/core/NetworkRequest.ts +216 -0
  168. package/src/core/XHRInterceptor.ts +179 -0
  169. package/src/core/har.ts +71 -0
  170. package/src/core/loggerSingleton.ts +14 -0
  171. package/src/hooks.ts +51 -0
  172. package/src/index.tsx +56 -0
  173. package/src/theme.ts +174 -0
  174. package/src/types.ts +83 -0
  175. package/src/utils/body.ts +194 -0
  176. package/src/utils/debounce.ts +18 -0
  177. package/src/utils/format.ts +50 -0
  178. package/src/utils/logger.ts +3 -0
  179. package/src/utils/search.ts +72 -0
  180. package/src/utils/url.ts +59 -0
@@ -0,0 +1,230 @@
1
+ "use strict";
2
+
3
+ import NetworkRequest from "./NetworkRequest.js";
4
+ import * as XHRInterceptor from "./XHRInterceptor.js";
5
+ import debounce from "../utils/debounce.js";
6
+ import { extractHost } from "../utils/url.js";
7
+ import { byteLength } from "../utils/format.js";
8
+ import { warn } from "../utils/logger.js";
9
+ export const DEFAULT_MAX_REQUESTS = 500;
10
+
11
+ /** Best-effort byte size when the server sent no Content-Length. */
12
+ const measureResponse = response => {
13
+ if (typeof response === 'string') return byteLength(response);
14
+ if (response && typeof response === 'object') {
15
+ const sized = response;
16
+ if (typeof sized.size === 'number') return sized.size; // Blob
17
+ if (typeof sized.byteLength === 'number') return sized.byteLength; // ArrayBuffer
18
+ try {
19
+ return byteLength(JSON.stringify(response));
20
+ } catch {
21
+ return 0;
22
+ }
23
+ }
24
+ return 0;
25
+ };
26
+ export const DEFAULT_REFRESH_RATE = 50;
27
+ /**
28
+ * Central store. Holds the captured requests (newest first) and publishes an
29
+ * immutable snapshot that React reads through `useSyncExternalStore`.
30
+ */
31
+ export default class Logger {
32
+ requests = [];
33
+ snapshot = [];
34
+ byXhrId = new Map();
35
+ listeners = new Set();
36
+ nextId = 0;
37
+ maxRequests = DEFAULT_MAX_REQUESTS;
38
+ refreshRate = DEFAULT_REFRESH_RATE;
39
+ paused = false;
40
+ dirty = false;
41
+ publishDebounced = debounce(() => this.publish(), this.refreshRate);
42
+
43
+ /** True while XMLHttpRequest is being intercepted by this logger. */
44
+ enabled = false;
45
+
46
+ // ---------------------------------------------------------------------
47
+ // Subscriptions
48
+ // ---------------------------------------------------------------------
49
+
50
+ subscribe = listener => {
51
+ this.listeners.add(listener);
52
+ return () => {
53
+ this.listeners.delete(listener);
54
+ };
55
+ };
56
+ getSnapshot = () => this.snapshot;
57
+ isPaused = () => this.paused;
58
+ emit() {
59
+ this.listeners.forEach(listener => listener());
60
+ }
61
+ publish() {
62
+ if (this.paused) return;
63
+ if (!this.dirty) return;
64
+ this.dirty = false;
65
+ this.snapshot = this.requests.slice();
66
+ this.emit();
67
+ }
68
+ schedulePublish() {
69
+ this.dirty = true;
70
+ this.publishDebounced();
71
+ }
72
+
73
+ // ---------------------------------------------------------------------
74
+ // Interceptor callbacks
75
+ // ---------------------------------------------------------------------
76
+
77
+ isIgnored(method, url) {
78
+ if (this.ignoredHosts?.has(extractHost(url))) return true;
79
+ if (this.ignoredUrls?.has(url)) return true;
80
+ if (this.ignoredPatterns?.some(pattern => pattern.test(`${method} ${url}`))) return true;
81
+ return false;
82
+ }
83
+ onOpen = (method, url, xhr) => {
84
+ if (this.isIgnored(method, url)) return;
85
+ const id = this.nextId++;
86
+ xhr.__lensId = id;
87
+ const request = new NetworkRequest(String(id), method, url);
88
+ this.byXhrId.set(id, request);
89
+ this.requests.unshift(request);
90
+ while (this.requests.length > this.maxRequests) {
91
+ const dropped = this.requests.pop();
92
+ if (dropped) this.byXhrId.delete(Number(dropped.id));
93
+ }
94
+ this.schedulePublish();
95
+ };
96
+ get = xhr => xhr.__lensId === undefined ? undefined : this.byXhrId.get(xhr.__lensId);
97
+ onRequestHeader = (header, value, xhr) => {
98
+ const request = this.get(xhr);
99
+ if (!request) return;
100
+ request.requestHeaders[header] = value;
101
+ };
102
+ onSend = (body, xhr) => {
103
+ const request = this.get(xhr);
104
+ if (!request) return;
105
+ request.update({
106
+ startTime: Date.now(),
107
+ dataSent: body
108
+ });
109
+ this.schedulePublish();
110
+ };
111
+ onHeadersReceived = (status, contentType, contentLength, headers, xhr) => {
112
+ const request = this.get(xhr);
113
+ if (!request) return;
114
+ request.update({
115
+ status,
116
+ responseContentType: contentType,
117
+ responseSize: contentLength,
118
+ responseHeaders: headers
119
+ });
120
+ this.schedulePublish();
121
+ };
122
+ onResponse = (status, timeout, response, responseURL, responseType, xhr) => {
123
+ const request = this.get(xhr);
124
+ if (!request) return;
125
+ const failed = status <= 0;
126
+ request.update({
127
+ endTime: Date.now(),
128
+ status,
129
+ timeout,
130
+ response,
131
+ responseURL,
132
+ responseType,
133
+ state: failed ? 'failed' : 'done',
134
+ failureReason: failed ? request.failureReason ?? 'error' : undefined
135
+ });
136
+ if (!failed && !request.responseSize) {
137
+ request.responseSize = measureResponse(response);
138
+ }
139
+ this.schedulePublish();
140
+ };
141
+ onFailure = (reason, xhr) => {
142
+ const request = this.get(xhr);
143
+ if (!request) return;
144
+ request.update({
145
+ state: 'failed',
146
+ failureReason: reason,
147
+ endTime: request.endTime || Date.now()
148
+ });
149
+ this.schedulePublish();
150
+ };
151
+
152
+ // ---------------------------------------------------------------------
153
+ // Public API
154
+ // ---------------------------------------------------------------------
155
+
156
+ start = (options = {}) => {
157
+ if (options.enabled === false) {
158
+ if (this.enabled) this.stop();
159
+ return;
160
+ }
161
+ if (this.enabled) return;
162
+ if (options.maxRequests !== undefined) {
163
+ if (typeof options.maxRequests !== 'number' || options.maxRequests < 1) {
164
+ warn('`maxRequests` must be a number greater than 0. Using the default.');
165
+ } else {
166
+ this.maxRequests = options.maxRequests;
167
+ }
168
+ }
169
+ if (options.refreshRate !== undefined) {
170
+ if (typeof options.refreshRate !== 'number' || options.refreshRate < 1) {
171
+ warn('`refreshRate` must be a number greater than 0. Using the default.');
172
+ } else {
173
+ this.refreshRate = options.refreshRate;
174
+ this.publishDebounced = debounce(() => this.publish(), this.refreshRate);
175
+ }
176
+ }
177
+ this.ignoredHosts = options.ignoredHosts?.length ? new Set(options.ignoredHosts) : undefined;
178
+ this.ignoredUrls = options.ignoredUrls?.length ? new Set(options.ignoredUrls) : undefined;
179
+ this.ignoredPatterns = options.ignoredPatterns?.length ? options.ignoredPatterns : undefined;
180
+ XHRInterceptor.setCallbacks({
181
+ onOpen: this.onOpen,
182
+ onRequestHeader: this.onRequestHeader,
183
+ onSend: this.onSend,
184
+ onHeadersReceived: this.onHeadersReceived,
185
+ onResponse: this.onResponse,
186
+ onFailure: this.onFailure
187
+ });
188
+ XHRInterceptor.enableInterception();
189
+ this.enabled = true;
190
+ this.emit();
191
+ };
192
+ stop = () => {
193
+ if (!this.enabled) return;
194
+ XHRInterceptor.disableInterception();
195
+ this.publishDebounced.cancel();
196
+ this.enabled = false;
197
+ this.paused = false;
198
+ this.requests = [];
199
+ this.byXhrId.clear();
200
+ this.nextId = 0;
201
+ this.maxRequests = DEFAULT_MAX_REQUESTS;
202
+ this.refreshRate = DEFAULT_REFRESH_RATE;
203
+ this.ignoredHosts = undefined;
204
+ this.ignoredUrls = undefined;
205
+ this.ignoredPatterns = undefined;
206
+ this.snapshot = [];
207
+ this.dirty = false;
208
+ this.emit();
209
+ };
210
+ getRequests = () => this.snapshot;
211
+ getRequest = id => this.requests.find(request => request.id === id);
212
+ clear = () => {
213
+ this.requests = [];
214
+ this.byXhrId.clear();
215
+ this.snapshot = [];
216
+ this.dirty = false;
217
+ this.emit();
218
+ };
219
+ setPaused = paused => {
220
+ if (this.paused === paused) return;
221
+ this.paused = paused;
222
+ if (!paused) {
223
+ this.dirty = true;
224
+ this.publish();
225
+ } else {
226
+ this.emit();
227
+ }
228
+ };
229
+ }
230
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NetworkRequest","XHRInterceptor","debounce","extractHost","byteLength","warn","DEFAULT_MAX_REQUESTS","measureResponse","response","sized","size","JSON","stringify","DEFAULT_REFRESH_RATE","Logger","requests","snapshot","byXhrId","Map","listeners","Set","nextId","maxRequests","refreshRate","paused","dirty","publishDebounced","publish","enabled","subscribe","listener","add","delete","getSnapshot","isPaused","emit","forEach","slice","schedulePublish","isIgnored","method","url","ignoredHosts","has","ignoredUrls","ignoredPatterns","some","pattern","test","onOpen","xhr","id","__lensId","request","String","set","unshift","length","dropped","pop","Number","get","undefined","onRequestHeader","header","value","requestHeaders","onSend","body","update","startTime","Date","now","dataSent","onHeadersReceived","status","contentType","contentLength","headers","responseContentType","responseSize","responseHeaders","onResponse","timeout","responseURL","responseType","failed","endTime","state","failureReason","onFailure","reason","start","options","stop","setCallbacks","enableInterception","disableInterception","cancel","clear","getRequests","getRequest","find","setPaused"],"sourceRoot":"../../../src","sources":["core/Logger.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+
3
+ import { parseRequestBody, parseResponseBody } from "../utils/body.js";
4
+ import { parseUrl } from "../utils/url.js";
5
+ const getHeader = (headers, name) => {
6
+ const lower = name.toLowerCase();
7
+ for (const key of Object.keys(headers)) {
8
+ if (key.toLowerCase() === lower) return headers[key];
9
+ }
10
+ return undefined;
11
+ };
12
+ export const statusGroupOf = (status, state) => {
13
+ if (state === 'failed') return 'failed';
14
+ if (state === 'pending' || status <= 0) return 'pending';
15
+ if (status < 200) return '1xx';
16
+ if (status < 300) return '2xx';
17
+ if (status < 400) return '3xx';
18
+ if (status < 500) return '4xx';
19
+ return '5xx';
20
+ };
21
+ export default class NetworkRequest {
22
+ type = 'XMLHttpRequest';
23
+ status = -1;
24
+ state = 'pending';
25
+ requestHeaders = {};
26
+ responseHeaders = {};
27
+ dataSent = null;
28
+ response = null;
29
+ responseType = '';
30
+ responseURL = '';
31
+ responseContentType = '';
32
+ responseSize = 0;
33
+ timeout = 0;
34
+ startTime = 0;
35
+ endTime = 0;
36
+ responseBodyVersion = -1;
37
+ constructor(id, method, url) {
38
+ this.id = id;
39
+ this.method = (method || 'GET').toUpperCase();
40
+ this.url = url;
41
+ this.updatedAt = Date.now();
42
+ }
43
+ get duration() {
44
+ if (!this.startTime) return -1;
45
+ if (!this.endTime) return -1;
46
+ return this.endTime - this.startTime;
47
+ }
48
+ get parsedUrl() {
49
+ if (!this.urlParts) this.urlParts = parseUrl(this.url);
50
+ return this.urlParts;
51
+ }
52
+ get host() {
53
+ return this.parsedUrl.host;
54
+ }
55
+ get path() {
56
+ return this.parsedUrl.path;
57
+ }
58
+ get statusGroup() {
59
+ return statusGroupOf(this.status, this.state);
60
+ }
61
+ get requestContentType() {
62
+ return getHeader(this.requestHeaders, 'content-type');
63
+ }
64
+ update(values) {
65
+ Object.assign(this, values);
66
+ if ('dataSent' in values) {
67
+ this.requestBodyCache = undefined;
68
+ const body = this.getRequestBody();
69
+ if (body.kind === 'json' && body.value && typeof body.value === 'object') {
70
+ const op = body.value.operationName;
71
+ if (typeof op === 'string') this.gqlOperation = op;
72
+ }
73
+ }
74
+ this.updatedAt = Date.now();
75
+ }
76
+ getRequestBody() {
77
+ if (!this.requestBodyCache) {
78
+ this.requestBodyCache = parseRequestBody(this.dataSent, this.requestContentType);
79
+ }
80
+ return this.requestBodyCache;
81
+ }
82
+
83
+ /**
84
+ * Resolves the response body. Blob responses are read asynchronously, hence the promise.
85
+ * Result is cached until the response changes.
86
+ */
87
+ getResponseBody() {
88
+ if (!this.responseBodyCache || this.responseBodyVersion !== this.updatedAt) {
89
+ this.responseBodyVersion = this.updatedAt;
90
+ this.responseBodyCache = parseResponseBody(this.response, this.responseType, this.responseContentType).catch(() => ({
91
+ kind: 'text',
92
+ text: '[Unable to read response body]'
93
+ }));
94
+ }
95
+ return this.responseBodyCache;
96
+ }
97
+ get curl() {
98
+ const parts = ['curl'];
99
+ if (this.method !== 'GET') parts.push(`-X ${this.method}`);
100
+ for (const [key, value] of Object.entries(this.requestHeaders)) {
101
+ parts.push(`-H ${shellQuote(`${key}: ${value}`)}`);
102
+ }
103
+ const body = this.getRequestBody();
104
+ if (body.kind === 'json' || body.kind === 'text') {
105
+ parts.push(`--data-raw ${shellQuote(body.kind === 'json' ? JSON.stringify(body.value) : body.text)}`);
106
+ } else if (body.kind === 'form') {
107
+ for (const [key, value] of Object.entries(body.value)) {
108
+ parts.push(`-F ${shellQuote(`${key}=${value}`)}`);
109
+ }
110
+ }
111
+ parts.push(shellQuote(this.url));
112
+ return parts.join(' \\\n ');
113
+ }
114
+ toRow() {
115
+ return {
116
+ id: this.id,
117
+ method: this.method,
118
+ url: this.url,
119
+ host: this.host,
120
+ path: this.path,
121
+ status: this.status,
122
+ state: this.state,
123
+ statusGroup: this.statusGroup,
124
+ failureReason: this.failureReason,
125
+ duration: this.duration,
126
+ startTime: this.startTime,
127
+ responseSize: this.responseSize,
128
+ gqlOperation: this.gqlOperation,
129
+ updatedAt: this.updatedAt
130
+ };
131
+ }
132
+ async toJSON() {
133
+ const response = await this.getResponseBody();
134
+ const request = this.getRequestBody();
135
+ return {
136
+ id: this.id,
137
+ method: this.method,
138
+ url: this.url,
139
+ status: this.status,
140
+ state: this.state,
141
+ failureReason: this.failureReason,
142
+ startTime: this.startTime,
143
+ endTime: this.endTime,
144
+ duration: this.duration,
145
+ requestHeaders: this.requestHeaders,
146
+ requestBody: request.kind === 'json' || request.kind === 'form' ? request.value : request.text,
147
+ responseHeaders: this.responseHeaders,
148
+ responseBody: response.kind === 'json' || response.kind === 'form' ? response.value : response.text,
149
+ responseSize: this.responseSize,
150
+ responseContentType: this.responseContentType
151
+ };
152
+ }
153
+ }
154
+ export const shellQuote = value => `'${value.replace(/'/g, `'\\''`)}'`;
155
+ //# sourceMappingURL=NetworkRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["parseRequestBody","parseResponseBody","parseUrl","getHeader","headers","name","lower","toLowerCase","key","Object","keys","undefined","statusGroupOf","status","state","NetworkRequest","type","requestHeaders","responseHeaders","dataSent","response","responseType","responseURL","responseContentType","responseSize","timeout","startTime","endTime","responseBodyVersion","constructor","id","method","url","toUpperCase","updatedAt","Date","now","duration","parsedUrl","urlParts","host","path","statusGroup","requestContentType","update","values","assign","requestBodyCache","body","getRequestBody","kind","value","op","operationName","gqlOperation","getResponseBody","responseBodyCache","catch","text","curl","parts","push","entries","shellQuote","JSON","stringify","join","toRow","failureReason","toJSON","request","requestBody","responseBody","replace"],"sourceRoot":"../../../src","sources":["core/NetworkRequest.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Patches the global XMLHttpRequest so every request made from JavaScript can
5
+ * be observed. `fetch` in React Native is built on XMLHttpRequest, so this also
6
+ * covers fetch, axios, Apollo and friends.
7
+ *
8
+ * Every callback is wrapped in try/catch: the inspector must never break the
9
+ * app's networking.
10
+ */
11
+
12
+ // XMLHttpRequest readyState values (fixed by the spec).
13
+ const HEADERS_RECEIVED = 2;
14
+ const DONE = 4;
15
+ const noop = () => {};
16
+ const noopCallbacks = {
17
+ onOpen: noop,
18
+ onRequestHeader: noop,
19
+ onSend: noop,
20
+ onHeadersReceived: noop,
21
+ onResponse: noop,
22
+ onFailure: noop
23
+ };
24
+ let callbacks = noopCallbacks;
25
+ let originals;
26
+ const safely = fn => {
27
+ try {
28
+ fn();
29
+ } catch {
30
+ // never let inspector code break a request
31
+ }
32
+ };
33
+ export const parseResponseHeaders = raw => {
34
+ const headers = {};
35
+ for (const line of raw.split(/[\r\n]+/)) {
36
+ const index = line.indexOf(':');
37
+ if (index <= 0) continue;
38
+ const key = line.slice(0, index).trim();
39
+ const value = line.slice(index + 1).trim();
40
+ headers[key] = key in headers ? `${headers[key]}, ${value}` : value;
41
+ }
42
+ return headers;
43
+ };
44
+ export const isInterceptorEnabled = () => originals !== undefined;
45
+ export const setCallbacks = next => {
46
+ callbacks = next;
47
+ };
48
+ const readResponse = xhr => {
49
+ if (xhr.responseType === '' || xhr.responseType === 'text') {
50
+ try {
51
+ return xhr.responseText;
52
+ } catch {
53
+ // responseText throws for some response types on some platforms
54
+ }
55
+ }
56
+ return xhr.response;
57
+ };
58
+ export const enableInterception = () => {
59
+ if (originals || typeof XMLHttpRequest === 'undefined') return;
60
+ const proto = XMLHttpRequest.prototype;
61
+ const saved = {
62
+ open: proto.open,
63
+ send: proto.send,
64
+ setRequestHeader: proto.setRequestHeader
65
+ };
66
+ originals = saved;
67
+ proto.open = function open(method, url, ...rest) {
68
+ safely(() => callbacks.onOpen(method, String(url), this));
69
+ return saved.open.call(this, method, url, ...rest);
70
+ };
71
+ proto.setRequestHeader = function setRequestHeader(header, value) {
72
+ safely(() => callbacks.onRequestHeader(header, value, this));
73
+ return saved.setRequestHeader.call(this, header, value);
74
+ };
75
+ proto.send = function send(body) {
76
+ // eslint-disable-next-line consistent-this -- the listeners below outlive `this`
77
+ const xhr = this;
78
+ safely(() => callbacks.onSend(body, xhr));
79
+ xhr.addEventListener('readystatechange', () => {
80
+ if (xhr.readyState === HEADERS_RECEIVED && !xhr.__lensSeenHeaders) {
81
+ xhr.__lensSeenHeaders = true;
82
+ safely(() => {
83
+ const length = Number(xhr.getResponseHeader('content-length'));
84
+ callbacks.onHeadersReceived(xhr.status, xhr.getResponseHeader('content-type') ?? '', Number.isFinite(length) ? length : 0, parseResponseHeaders(xhr.getAllResponseHeaders()), xhr);
85
+ });
86
+ }
87
+ if (xhr.readyState === DONE && !xhr.__lensSeenDone) {
88
+ xhr.__lensSeenDone = true;
89
+ safely(() => callbacks.onResponse(xhr.status, xhr.timeout, readResponse(xhr), xhr.responseURL, xhr.responseType, xhr));
90
+ }
91
+ });
92
+ for (const reason of ['error', 'timeout', 'abort']) {
93
+ xhr.addEventListener(reason, () => safely(() => callbacks.onFailure(reason, xhr)));
94
+ }
95
+ return saved.send.call(this, body);
96
+ };
97
+ };
98
+ export const disableInterception = () => {
99
+ if (!originals) return;
100
+ Object.assign(XMLHttpRequest.prototype, originals);
101
+ originals = undefined;
102
+ callbacks = noopCallbacks;
103
+ };
104
+ //# sourceMappingURL=XHRInterceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["HEADERS_RECEIVED","DONE","noop","noopCallbacks","onOpen","onRequestHeader","onSend","onHeadersReceived","onResponse","onFailure","callbacks","originals","safely","fn","parseResponseHeaders","raw","headers","line","split","index","indexOf","key","slice","trim","value","isInterceptorEnabled","undefined","setCallbacks","next","readResponse","xhr","responseType","responseText","response","enableInterception","XMLHttpRequest","proto","prototype","saved","open","send","setRequestHeader","method","url","rest","String","call","header","body","addEventListener","readyState","__lensSeenHeaders","length","Number","getResponseHeader","status","isFinite","getAllResponseHeaders","__lensSeenDone","timeout","responseURL","reason","disableInterception","Object","assign"],"sourceRoot":"../../../src","sources":["core/XHRInterceptor.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAgCA;AACA,MAAMA,gBAAgB,GAAG,CAAC;AAC1B,MAAMC,IAAI,GAAG,CAAC;AAId,MAAMC,IAAI,GAAGA,CAAA,KAAM,CAAC,CAAC;AACrB,MAAMC,aAAmC,GAAG;EAC1CC,MAAM,EAAEF,IAAI;EACZG,eAAe,EAAEH,IAAI;EACrBI,MAAM,EAAEJ,IAAI;EACZK,iBAAiB,EAAEL,IAAI;EACvBM,UAAU,EAAEN,IAAI;EAChBO,SAAS,EAAEP;AACb,CAAC;AAED,IAAIQ,SAAS,GAAGP,aAAa;AAC7B,IAAIQ,SAAgC;AAEpC,MAAMC,MAAM,GAAIC,EAAc,IAAK;EACjC,IAAI;IACFA,EAAE,CAAC,CAAC;EACN,CAAC,CAAC,MAAM;IACN;EAAA;AAEJ,CAAC;AAED,OAAO,MAAMC,oBAAoB,GAAIC,GAAW,IAA6B;EAC3E,MAAMC,OAA+B,GAAG,CAAC,CAAC;EAC1C,KAAK,MAAMC,IAAI,IAAIF,GAAG,CAACG,KAAK,CAAC,SAAS,CAAC,EAAE;IACvC,MAAMC,KAAK,GAAGF,IAAI,CAACG,OAAO,CAAC,GAAG,CAAC;IAC/B,IAAID,KAAK,IAAI,CAAC,EAAE;IAChB,MAAME,GAAG,GAAGJ,IAAI,CAACK,KAAK,CAAC,CAAC,EAAEH,KAAK,CAAC,CAACI,IAAI,CAAC,CAAC;IACvC,MAAMC,KAAK,GAAGP,IAAI,CAACK,KAAK,CAACH,KAAK,GAAG,CAAC,CAAC,CAACI,IAAI,CAAC,CAAC;IAC1CP,OAAO,CAACK,GAAG,CAAC,GAAGA,GAAG,IAAIL,OAAO,GAAG,GAAGA,OAAO,CAACK,GAAG,CAAC,KAAKG,KAAK,EAAE,GAAGA,KAAK;EACrE;EACA,OAAOR,OAAO;AAChB,CAAC;AAED,OAAO,MAAMS,oBAAoB,GAAGA,CAAA,KAAed,SAAS,KAAKe,SAAS;AAE1E,OAAO,MAAMC,YAAY,GAAIC,IAA0B,IAAK;EAC1DlB,SAAS,GAAGkB,IAAI;AAClB,CAAC;AAED,MAAMC,YAAY,GAAIC,GAAmB,IAAc;EACrD,IAAIA,GAAG,CAACC,YAAY,KAAK,EAAE,IAAID,GAAG,CAACC,YAAY,KAAK,MAAM,EAAE;IAC1D,IAAI;MACF,OAAOD,GAAG,CAACE,YAAY;IACzB,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EACA,OAAOF,GAAG,CAACG,QAAQ;AACrB,CAAC;AAED,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAY;EAC5C,IAAIvB,SAAS,IAAI,OAAOwB,cAAc,KAAK,WAAW,EAAE;EAExD,MAAMC,KAAK,GAAGD,cAAc,CAACE,SAAS;EACtC,MAAMC,KAAgB,GAAG;IACvBC,IAAI,EAAEH,KAAK,CAACG,IAAI;IAChBC,IAAI,EAAEJ,KAAK,CAACI,IAAI;IAChBC,gBAAgB,EAAEL,KAAK,CAACK;EAC1B,CAAC;EACD9B,SAAS,GAAG2B,KAAK;EAEjBF,KAAK,CAACG,IAAI,GAAG,SAASA,IAAIA,CAExBG,MAAc,EACdC,GAAiB,EACjB,GAAGC,IAAe,EAClB;IACAhC,MAAM,CAAC,MAAMF,SAAS,CAACN,MAAM,CAACsC,MAAM,EAAEG,MAAM,CAACF,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IACzD,OAAQL,KAAK,CAACC,IAAI,CAAkCO,IAAI,CACtD,IAAI,EACJJ,MAAM,EACNC,GAAG,EACH,GAAGC,IACL,CAAC;EACH,CAA2B;EAE3BR,KAAK,CAACK,gBAAgB,GAAG,SAASA,gBAAgBA,CAEhDM,MAAc,EACdvB,KAAa,EACb;IACAZ,MAAM,CAAC,MAAMF,SAAS,CAACL,eAAe,CAAC0C,MAAM,EAAEvB,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAOc,KAAK,CAACG,gBAAgB,CAACK,IAAI,CAAC,IAAI,EAAEC,MAAM,EAAEvB,KAAK,CAAC;EACzD,CAAC;EAEDY,KAAK,CAACI,IAAI,GAAG,SAASA,IAAIA,CAAoBQ,IAAc,EAAE;IAC5D;IACA,MAAMlB,GAAG,GAAG,IAAI;IAChBlB,MAAM,CAAC,MAAMF,SAAS,CAACJ,MAAM,CAAC0C,IAAI,EAAElB,GAAG,CAAC,CAAC;IAEzCA,GAAG,CAACmB,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;MAC7C,IAAInB,GAAG,CAACoB,UAAU,KAAKlD,gBAAgB,IAAI,CAAC8B,GAAG,CAACqB,iBAAiB,EAAE;QACjErB,GAAG,CAACqB,iBAAiB,GAAG,IAAI;QAC5BvC,MAAM,CAAC,MAAM;UACX,MAAMwC,MAAM,GAAGC,MAAM,CAACvB,GAAG,CAACwB,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;UAC9D5C,SAAS,CAACH,iBAAiB,CACzBuB,GAAG,CAACyB,MAAM,EACVzB,GAAG,CAACwB,iBAAiB,CAAC,cAAc,CAAC,IAAI,EAAE,EAC3CD,MAAM,CAACG,QAAQ,CAACJ,MAAM,CAAC,GAAGA,MAAM,GAAG,CAAC,EACpCtC,oBAAoB,CAACgB,GAAG,CAAC2B,qBAAqB,CAAC,CAAC,CAAC,EACjD3B,GACF,CAAC;QACH,CAAC,CAAC;MACJ;MACA,IAAIA,GAAG,CAACoB,UAAU,KAAKjD,IAAI,IAAI,CAAC6B,GAAG,CAAC4B,cAAc,EAAE;QAClD5B,GAAG,CAAC4B,cAAc,GAAG,IAAI;QACzB9C,MAAM,CAAC,MACLF,SAAS,CAACF,UAAU,CAClBsB,GAAG,CAACyB,MAAM,EACVzB,GAAG,CAAC6B,OAAO,EACX9B,YAAY,CAACC,GAAG,CAAC,EACjBA,GAAG,CAAC8B,WAAW,EACf9B,GAAG,CAACC,YAAY,EAChBD,GACF,CACF,CAAC;MACH;IACF,CAAC,CAAC;IACF,KAAK,MAAM+B,MAAM,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAW;MAC3D/B,GAAG,CAACmB,gBAAgB,CAACY,MAAM,EAAE,MAC3BjD,MAAM,CAAC,MAAMF,SAAS,CAACD,SAAS,CAACoD,MAAM,EAAE/B,GAAG,CAAC,CAC/C,CAAC;IACH;IAEA,OAAOQ,KAAK,CAACE,IAAI,CAACM,IAAI,CAAC,IAAI,EAAEE,IAA6C,CAAC;EAC7E,CAAC;AACH,CAAC;AAED,OAAO,MAAMc,mBAAmB,GAAGA,CAAA,KAAY;EAC7C,IAAI,CAACnD,SAAS,EAAE;EAChBoD,MAAM,CAACC,MAAM,CAAC7B,cAAc,CAACE,SAAS,EAAE1B,SAAS,CAAC;EAClDA,SAAS,GAAGe,SAAS;EACrBhB,SAAS,GAAGP,aAAa;AAC3B,CAAC","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ const headersToArray = headers => Object.entries(headers).map(([name, value]) => ({
4
+ name,
5
+ value
6
+ }));
7
+ const createHarEntry = async request => {
8
+ const requestBody = request.getRequestBody();
9
+ const responseBody = await request.getResponseBody();
10
+ return {
11
+ startedDateTime: new Date(request.startTime || Date.now()).toISOString(),
12
+ time: Math.max(request.duration, 0),
13
+ request: {
14
+ method: request.method,
15
+ url: request.url.replace(/\s/g, '%20'),
16
+ httpVersion: 'HTTP/1.1',
17
+ headers: headersToArray(request.requestHeaders),
18
+ queryString: Object.entries(request.parsedUrl.query).map(([name, value]) => ({
19
+ name,
20
+ value
21
+ })),
22
+ cookies: [],
23
+ headersSize: -1,
24
+ bodySize: -1,
25
+ ...(requestBody.kind !== 'empty' ? {
26
+ postData: {
27
+ mimeType: request.requestContentType ?? 'text/plain',
28
+ text: requestBody.text
29
+ }
30
+ } : {})
31
+ },
32
+ response: {
33
+ status: Math.max(request.status, 0),
34
+ statusText: '',
35
+ httpVersion: 'HTTP/1.1',
36
+ headers: headersToArray(request.responseHeaders),
37
+ cookies: [],
38
+ content: {
39
+ size: request.responseSize || -1,
40
+ mimeType: request.responseContentType || 'text/plain',
41
+ text: responseBody.text
42
+ },
43
+ redirectURL: '',
44
+ headersSize: -1,
45
+ bodySize: -1
46
+ },
47
+ cache: {},
48
+ timings: {
49
+ blocked: -1,
50
+ dns: -1,
51
+ ssl: -1,
52
+ connect: -1,
53
+ send: 0,
54
+ wait: Math.max(request.duration, 0),
55
+ receive: 0
56
+ }
57
+ };
58
+ };
59
+
60
+ /** Minimal HAR 1.2 document that Chrome/Charles/Proxyman can import. */
61
+ export const createHar = async requests => ({
62
+ log: {
63
+ version: '1.2',
64
+ creator: {
65
+ name: 'react-native-network-lens',
66
+ version: '1.0'
67
+ },
68
+ pages: [],
69
+ entries: await Promise.all(requests.map(createHarEntry))
70
+ }
71
+ });
72
+ //# sourceMappingURL=har.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["headersToArray","headers","Object","entries","map","name","value","createHarEntry","request","requestBody","getRequestBody","responseBody","getResponseBody","startedDateTime","Date","startTime","now","toISOString","time","Math","max","duration","method","url","replace","httpVersion","requestHeaders","queryString","parsedUrl","query","cookies","headersSize","bodySize","kind","postData","mimeType","requestContentType","text","response","status","statusText","responseHeaders","content","size","responseSize","responseContentType","redirectURL","cache","timings","blocked","dns","ssl","connect","send","wait","receive","createHar","requests","log","version","creator","pages","Promise","all"],"sourceRoot":"../../../src","sources":["core/har.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ import Logger from "./Logger.js";
4
+ const KEY = '__reactNativeNetworkLens__';
5
+ /**
6
+ * One logger per JS runtime. It lives on `globalThis` so that Fast Refresh
7
+ * (which re-evaluates modules) keeps the same instance and the same patched
8
+ * XMLHttpRequest instead of silently creating a fresh, disabled one.
9
+ */
10
+ const logger = globalThis[KEY] ??= new Logger();
11
+ export default logger;
12
+ //# sourceMappingURL=loggerSingleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Logger","KEY","logger","globalThis"],"sourceRoot":"../../../src","sources":["core/loggerSingleton.ts"],"mappings":";;AAAA,OAAOA,MAAM,MAAM,aAAU;AAE7B,MAAMC,GAAG,GAAG,4BAA4B;AAIxC;AACA;AACA;AACA;AACA;AACA,MAAMC,MAAc,GAAKC,UAAU,CAAsBF,GAAG,CAAC,KAAK,IAAID,MAAM,CAAC,CAAE;AAE/E,eAAeE,MAAM","ignoreList":[]}