react-native-network-lens 0.0.0-stage → 0.1.1
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/LICENSE +20 -0
- package/README.md +208 -2
- package/lib/module/backHandler.js +31 -0
- package/lib/module/backHandler.js.map +1 -0
- package/lib/module/components/BodyViewer.js +213 -0
- package/lib/module/components/BodyViewer.js.map +1 -0
- package/lib/module/components/CodeList.js +104 -0
- package/lib/module/components/CodeList.js.map +1 -0
- package/lib/module/components/JsonTree/JsonTreeView.js +206 -0
- package/lib/module/components/JsonTree/JsonTreeView.js.map +1 -0
- package/lib/module/components/JsonTree/model.js +196 -0
- package/lib/module/components/JsonTree/model.js.map +1 -0
- package/lib/module/components/NetworkLens.js +110 -0
- package/lib/module/components/NetworkLens.js.map +1 -0
- package/lib/module/components/NetworkLensOverlay.js +158 -0
- package/lib/module/components/NetworkLensOverlay.js.map +1 -0
- package/lib/module/components/RawTextView.js +119 -0
- package/lib/module/components/RawTextView.js.map +1 -0
- package/lib/module/components/RequestDetails/RequestDetails.js +256 -0
- package/lib/module/components/RequestDetails/RequestDetails.js.map +1 -0
- package/lib/module/components/RequestList/FilterBar.js +138 -0
- package/lib/module/components/RequestList/FilterBar.js.map +1 -0
- package/lib/module/components/RequestList/RequestList.js +163 -0
- package/lib/module/components/RequestList/RequestList.js.map +1 -0
- package/lib/module/components/RequestList/RequestRow.js +161 -0
- package/lib/module/components/RequestList/RequestRow.js.map +1 -0
- package/lib/module/components/RequestList/filters.js +57 -0
- package/lib/module/components/RequestList/filters.js.map +1 -0
- package/lib/module/components/ui/ActionSheet.js +94 -0
- package/lib/module/components/ui/ActionSheet.js.map +1 -0
- package/lib/module/components/ui/Button.js +104 -0
- package/lib/module/components/ui/Button.js.map +1 -0
- package/lib/module/components/ui/Pill.js +53 -0
- package/lib/module/components/ui/Pill.js.map +1 -0
- package/lib/module/components/ui/SearchInput.js +77 -0
- package/lib/module/components/ui/SearchInput.js.map +1 -0
- package/lib/module/components/ui/Section.js +147 -0
- package/lib/module/components/ui/Section.js.map +1 -0
- package/lib/module/components/ui/SegmentedControl.js +65 -0
- package/lib/module/components/ui/SegmentedControl.js.map +1 -0
- package/lib/module/components/ui/index.js +9 -0
- package/lib/module/components/ui/index.js.map +1 -0
- package/lib/module/core/Logger.js +230 -0
- package/lib/module/core/Logger.js.map +1 -0
- package/lib/module/core/NetworkRequest.js +155 -0
- package/lib/module/core/NetworkRequest.js.map +1 -0
- package/lib/module/core/XHRInterceptor.js +104 -0
- package/lib/module/core/XHRInterceptor.js.map +1 -0
- package/lib/module/core/har.js +72 -0
- package/lib/module/core/har.js.map +1 -0
- package/lib/module/core/loggerSingleton.js +12 -0
- package/lib/module/core/loggerSingleton.js.map +1 -0
- package/lib/module/hooks.js +42 -0
- package/lib/module/hooks.js.map +1 -0
- package/lib/module/index.js +34 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/theme.js +136 -0
- package/lib/module/theme.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/body.js +179 -0
- package/lib/module/utils/body.js.map +1 -0
- package/lib/module/utils/debounce.js +18 -0
- package/lib/module/utils/debounce.js.map +1 -0
- package/lib/module/utils/format.js +45 -0
- package/lib/module/utils/format.js.map +1 -0
- package/lib/module/utils/logger.js +6 -0
- package/lib/module/utils/logger.js.map +1 -0
- package/lib/module/utils/search.js +70 -0
- package/lib/module/utils/search.js.map +1 -0
- package/lib/module/utils/url.js +50 -0
- package/lib/module/utils/url.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/backHandler.d.ts +15 -0
- package/lib/typescript/src/backHandler.d.ts.map +1 -0
- package/lib/typescript/src/components/BodyViewer.d.ts +16 -0
- package/lib/typescript/src/components/BodyViewer.d.ts.map +1 -0
- package/lib/typescript/src/components/CodeList.d.ts +21 -0
- package/lib/typescript/src/components/CodeList.d.ts.map +1 -0
- package/lib/typescript/src/components/JsonTree/JsonTreeView.d.ts +21 -0
- package/lib/typescript/src/components/JsonTree/JsonTreeView.d.ts.map +1 -0
- package/lib/typescript/src/components/JsonTree/model.d.ts +53 -0
- package/lib/typescript/src/components/JsonTree/model.d.ts.map +1 -0
- package/lib/typescript/src/components/NetworkLens.d.ts +31 -0
- package/lib/typescript/src/components/NetworkLens.d.ts.map +1 -0
- package/lib/typescript/src/components/NetworkLensOverlay.d.ts +32 -0
- package/lib/typescript/src/components/NetworkLensOverlay.d.ts.map +1 -0
- package/lib/typescript/src/components/RawTextView.d.ts +14 -0
- package/lib/typescript/src/components/RawTextView.d.ts.map +1 -0
- package/lib/typescript/src/components/RequestDetails/RequestDetails.d.ts +9 -0
- package/lib/typescript/src/components/RequestDetails/RequestDetails.d.ts.map +1 -0
- package/lib/typescript/src/components/RequestList/FilterBar.d.ts +12 -0
- package/lib/typescript/src/components/RequestList/FilterBar.d.ts.map +1 -0
- package/lib/typescript/src/components/RequestList/RequestList.d.ts +18 -0
- package/lib/typescript/src/components/RequestList/RequestList.d.ts.map +1 -0
- package/lib/typescript/src/components/RequestList/RequestRow.d.ts +11 -0
- package/lib/typescript/src/components/RequestList/RequestRow.d.ts.map +1 -0
- package/lib/typescript/src/components/RequestList/filters.d.ts +17 -0
- package/lib/typescript/src/components/RequestList/filters.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/ActionSheet.d.ts +15 -0
- package/lib/typescript/src/components/ui/ActionSheet.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Button.d.ts +21 -0
- package/lib/typescript/src/components/ui/Button.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Pill.d.ts +11 -0
- package/lib/typescript/src/components/ui/Pill.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/SearchInput.d.ts +17 -0
- package/lib/typescript/src/components/ui/SearchInput.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/Section.d.ts +16 -0
- package/lib/typescript/src/components/ui/Section.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/SegmentedControl.d.ts +14 -0
- package/lib/typescript/src/components/ui/SegmentedControl.d.ts.map +1 -0
- package/lib/typescript/src/components/ui/index.d.ts +7 -0
- package/lib/typescript/src/components/ui/index.d.ts.map +1 -0
- package/lib/typescript/src/core/Logger.d.ts +48 -0
- package/lib/typescript/src/core/Logger.d.ts.map +1 -0
- package/lib/typescript/src/core/NetworkRequest.d.ts +48 -0
- package/lib/typescript/src/core/NetworkRequest.d.ts.map +1 -0
- package/lib/typescript/src/core/XHRInterceptor.d.ts +29 -0
- package/lib/typescript/src/core/XHRInterceptor.d.ts.map +1 -0
- package/lib/typescript/src/core/har.d.ts +65 -0
- package/lib/typescript/src/core/har.d.ts.map +1 -0
- package/lib/typescript/src/core/loggerSingleton.d.ts +9 -0
- package/lib/typescript/src/core/loggerSingleton.d.ts.map +1 -0
- package/lib/typescript/src/hooks.d.ts +11 -0
- package/lib/typescript/src/hooks.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +33 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/theme.d.ts +49 -0
- package/lib/typescript/src/theme.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +80 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/body.d.ts +19 -0
- package/lib/typescript/src/utils/body.d.ts.map +1 -0
- package/lib/typescript/src/utils/debounce.d.ts +4 -0
- package/lib/typescript/src/utils/debounce.d.ts.map +1 -0
- package/lib/typescript/src/utils/format.d.ts +7 -0
- package/lib/typescript/src/utils/format.d.ts.map +1 -0
- package/lib/typescript/src/utils/logger.d.ts +2 -0
- package/lib/typescript/src/utils/logger.d.ts.map +1 -0
- package/lib/typescript/src/utils/search.d.ts +17 -0
- package/lib/typescript/src/utils/search.d.ts.map +1 -0
- package/lib/typescript/src/utils/url.d.ts +15 -0
- package/lib/typescript/src/utils/url.d.ts.map +1 -0
- package/package.json +186 -4
- package/src/backHandler.ts +29 -0
- package/src/components/BodyViewer.tsx +250 -0
- package/src/components/CodeList.tsx +120 -0
- package/src/components/JsonTree/JsonTreeView.tsx +304 -0
- package/src/components/JsonTree/model.ts +266 -0
- package/src/components/NetworkLens.tsx +176 -0
- package/src/components/NetworkLensOverlay.tsx +187 -0
- package/src/components/RawTextView.tsx +163 -0
- package/src/components/RequestDetails/RequestDetails.tsx +315 -0
- package/src/components/RequestList/FilterBar.tsx +168 -0
- package/src/components/RequestList/RequestList.tsx +226 -0
- package/src/components/RequestList/RequestRow.tsx +150 -0
- package/src/components/RequestList/filters.ts +98 -0
- package/src/components/ui/ActionSheet.tsx +109 -0
- package/src/components/ui/Button.tsx +124 -0
- package/src/components/ui/Pill.tsx +53 -0
- package/src/components/ui/SearchInput.tsx +97 -0
- package/src/components/ui/Section.tsx +133 -0
- package/src/components/ui/SegmentedControl.tsx +79 -0
- package/src/components/ui/index.ts +6 -0
- package/src/core/Logger.ts +293 -0
- package/src/core/NetworkRequest.ts +216 -0
- package/src/core/XHRInterceptor.ts +179 -0
- package/src/core/har.ts +71 -0
- package/src/core/loggerSingleton.ts +14 -0
- package/src/hooks.ts +51 -0
- package/src/index.tsx +56 -0
- package/src/theme.ts +174 -0
- package/src/types.ts +83 -0
- package/src/utils/body.ts +194 -0
- package/src/utils/debounce.ts +18 -0
- package/src/utils/format.ts +50 -0
- package/src/utils/logger.ts +3 -0
- package/src/utils/search.ts +72 -0
- 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":";;AAAA,OAAOA,cAAc,MAAM,qBAAkB;AAC7C,OAAO,KAAKC,cAAc,MAAM,qBAAkB;AAElD,OAAOC,QAAQ,MAAM,sBAAmB;AACxC,SAASC,WAAW,QAAQ,iBAAc;AAC1C,SAASC,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,IAAI,QAAQ,oBAAiB;AAEtC,OAAO,MAAMC,oBAAoB,GAAG,GAAG;;AAEvC;AACA,MAAMC,eAAe,GAAIC,QAAiB,IAAa;EACrD,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE,OAAOJ,UAAU,CAACI,QAAQ,CAAC;EAC7D,IAAIA,QAAQ,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;IAC5C,MAAMC,KAAK,GAAGD,QAAoD;IAClE,IAAI,OAAOC,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE,OAAOD,KAAK,CAACC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAOD,KAAK,CAACL,UAAU,KAAK,QAAQ,EAAE,OAAOK,KAAK,CAACL,UAAU,CAAC,CAAC;IACnE,IAAI;MACF,OAAOA,UAAU,CAACO,IAAI,CAACC,SAAS,CAACJ,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,MAAM;MACN,OAAO,CAAC;IACV;EACF;EACA,OAAO,CAAC;AACV,CAAC;AACD,OAAO,MAAMK,oBAAoB,GAAG,EAAE;AAItC;AACA;AACA;AACA;AACA,eAAe,MAAMC,MAAM,CAAC;EAClBC,QAAQ,GAAqB,EAAE;EAC/BC,QAAQ,GAAqB,EAAE;EAC/BC,OAAO,GAAG,IAAIC,GAAG,CAAyB,CAAC;EAC3CC,SAAS,GAAG,IAAIC,GAAG,CAAW,CAAC;EAC/BC,MAAM,GAAG,CAAC;EACVC,WAAW,GAAGhB,oBAAoB;EAClCiB,WAAW,GAAGV,oBAAoB;EAIlCW,MAAM,GAAG,KAAK;EACdC,KAAK,GAAG,KAAK;EACbC,gBAAgB,GAAGxB,QAAQ,CAAC,MAAM,IAAI,CAACyB,OAAO,CAAC,CAAC,EAAE,IAAI,CAACJ,WAAW,CAAC;;EAE3E;EACAK,OAAO,GAAG,KAAK;;EAEf;EACA;EACA;;EAEAC,SAAS,GAAIC,QAAkB,IAAmB;IAChD,IAAI,CAACX,SAAS,CAACY,GAAG,CAACD,QAAQ,CAAC;IAC5B,OAAO,MAAM;MACX,IAAI,CAACX,SAAS,CAACa,MAAM,CAACF,QAAQ,CAAC;IACjC,CAAC;EACH,CAAC;EAEDG,WAAW,GAAGA,CAAA,KAAwB,IAAI,CAACjB,QAAQ;EAEnDkB,QAAQ,GAAGA,CAAA,KAAe,IAAI,CAACV,MAAM;EAE7BW,IAAIA,CAAA,EAAG;IACb,IAAI,CAAChB,SAAS,CAACiB,OAAO,CAAEN,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAAC;EAClD;EAEQH,OAAOA,CAAA,EAAG;IAChB,IAAI,IAAI,CAACH,MAAM,EAAE;IACjB,IAAI,CAAC,IAAI,CAACC,KAAK,EAAE;IACjB,IAAI,CAACA,KAAK,GAAG,KAAK;IAClB,IAAI,CAACT,QAAQ,GAAG,IAAI,CAACD,QAAQ,CAACsB,KAAK,CAAC,CAAC;IACrC,IAAI,CAACF,IAAI,CAAC,CAAC;EACb;EAEQG,eAAeA,CAAA,EAAG;IACxB,IAAI,CAACb,KAAK,GAAG,IAAI;IACjB,IAAI,CAACC,gBAAgB,CAAC,CAAC;EACzB;;EAEA;EACA;EACA;;EAEQa,SAASA,CAACC,MAAc,EAAEC,GAAW,EAAW;IACtD,IAAI,IAAI,CAACC,YAAY,EAAEC,GAAG,CAACxC,WAAW,CAACsC,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI;IACzD,IAAI,IAAI,CAACG,WAAW,EAAED,GAAG,CAACF,GAAG,CAAC,EAAE,OAAO,IAAI;IAC3C,IACE,IAAI,CAACI,eAAe,EAAEC,IAAI,CAAEC,OAAO,IAAKA,OAAO,CAACC,IAAI,CAAC,GAAGR,MAAM,IAAIC,GAAG,EAAE,CAAC,CAAC,EAEzE,OAAO,IAAI;IACb,OAAO,KAAK;EACd;EAEQQ,MAAM,GAAGA,CACfT,MAAqB,EACrBC,GAAW,EACXS,GAAkC,KAC/B;IACH,IAAI,IAAI,CAACX,SAAS,CAACC,MAAM,EAAEC,GAAG,CAAC,EAAE;IACjC,MAAMU,EAAE,GAAG,IAAI,CAAC9B,MAAM,EAAE;IACxB6B,GAAG,CAACE,QAAQ,GAAGD,EAAE;IACjB,MAAME,OAAO,GAAG,IAAIrD,cAAc,CAACsD,MAAM,CAACH,EAAE,CAAC,EAAEX,MAAM,EAAEC,GAAG,CAAC;IAC3D,IAAI,CAACxB,OAAO,CAACsC,GAAG,CAACJ,EAAE,EAAEE,OAAO,CAAC;IAC7B,IAAI,CAACtC,QAAQ,CAACyC,OAAO,CAACH,OAAO,CAAC;IAC9B,OAAO,IAAI,CAACtC,QAAQ,CAAC0C,MAAM,GAAG,IAAI,CAACnC,WAAW,EAAE;MAC9C,MAAMoC,OAAO,GAAG,IAAI,CAAC3C,QAAQ,CAAC4C,GAAG,CAAC,CAAC;MACnC,IAAID,OAAO,EAAE,IAAI,CAACzC,OAAO,CAACe,MAAM,CAAC4B,MAAM,CAACF,OAAO,CAACP,EAAE,CAAC,CAAC;IACtD;IACA,IAAI,CAACb,eAAe,CAAC,CAAC;EACxB,CAAC;EAEOuB,GAAG,GAAIX,GAAkC,IAC/CA,GAAG,CAACE,QAAQ,KAAKU,SAAS,GAAGA,SAAS,GAAG,IAAI,CAAC7C,OAAO,CAAC4C,GAAG,CAACX,GAAG,CAACE,QAAQ,CAAC;EAEjEW,eAAe,GAAGA,CACxBC,MAAc,EACdC,KAAa,EACbf,GAAkC,KAC/B;IACH,MAAMG,OAAO,GAAG,IAAI,CAACQ,GAAG,CAACX,GAAG,CAAC;IAC7B,IAAI,CAACG,OAAO,EAAE;IACdA,OAAO,CAACa,cAAc,CAACF,MAAM,CAAC,GAAGC,KAAK;EACxC,CAAC;EAEOE,MAAM,GAAGA,CAACC,IAAa,EAAElB,GAAkC,KAAK;IACtE,MAAMG,OAAO,GAAG,IAAI,CAACQ,GAAG,CAACX,GAAG,CAAC;IAC7B,IAAI,CAACG,OAAO,EAAE;IACdA,OAAO,CAACgB,MAAM,CAAC;MAAEC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;MAAEC,QAAQ,EAAEL;IAAK,CAAC,CAAC;IACzD,IAAI,CAAC9B,eAAe,CAAC,CAAC;EACxB,CAAC;EAEOoC,iBAAiB,GAAGA,CAC1BC,MAAc,EACdC,WAAmB,EACnBC,aAAqB,EACrBC,OAA+B,EAC/B5B,GAAkC,KAC/B;IACH,MAAMG,OAAO,GAAG,IAAI,CAACQ,GAAG,CAACX,GAAG,CAAC;IAC7B,IAAI,CAACG,OAAO,EAAE;IACdA,OAAO,CAACgB,MAAM,CAAC;MACbM,MAAM;MACNI,mBAAmB,EAAEH,WAAW;MAChCI,YAAY,EAAEH,aAAa;MAC3BI,eAAe,EAAEH;IACnB,CAAC,CAAC;IACF,IAAI,CAACxC,eAAe,CAAC,CAAC;EACxB,CAAC;EAEO4C,UAAU,GAAGA,CACnBP,MAAc,EACdQ,OAAe,EACf3E,QAAiB,EACjB4E,WAAmB,EACnBC,YAAoB,EACpBnC,GAAkC,KAC/B;IACH,MAAMG,OAAO,GAAG,IAAI,CAACQ,GAAG,CAACX,GAAG,CAAC;IAC7B,IAAI,CAACG,OAAO,EAAE;IACd,MAAMiC,MAAM,GAAGX,MAAM,IAAI,CAAC;IAC1BtB,OAAO,CAACgB,MAAM,CAAC;MACbkB,OAAO,EAAEhB,IAAI,CAACC,GAAG,CAAC,CAAC;MACnBG,MAAM;MACNQ,OAAO;MACP3E,QAAQ;MACR4E,WAAW;MACXC,YAAY;MACZG,KAAK,EAAEF,MAAM,GAAG,QAAQ,GAAG,MAAM;MACjCG,aAAa,EAAEH,MAAM,GAAIjC,OAAO,CAACoC,aAAa,IAAI,OAAO,GAAI3B;IAC/D,CAAC,CAAC;IACF,IAAI,CAACwB,MAAM,IAAI,CAACjC,OAAO,CAAC2B,YAAY,EAAE;MACpC3B,OAAO,CAAC2B,YAAY,GAAGzE,eAAe,CAACC,QAAQ,CAAC;IAClD;IACA,IAAI,CAAC8B,eAAe,CAAC,CAAC;EACxB,CAAC;EAEOoD,SAAS,GAAGA,CAClBC,MAAqC,EACrCzC,GAAkC,KAC/B;IACH,MAAMG,OAAO,GAAG,IAAI,CAACQ,GAAG,CAACX,GAAG,CAAC;IAC7B,IAAI,CAACG,OAAO,EAAE;IACdA,OAAO,CAACgB,MAAM,CAAC;MACbmB,KAAK,EAAE,QAAQ;MACfC,aAAa,EAAEE,MAAM;MACrBJ,OAAO,EAAElC,OAAO,CAACkC,OAAO,IAAIhB,IAAI,CAACC,GAAG,CAAC;IACvC,CAAC,CAAC;IACF,IAAI,CAAClC,eAAe,CAAC,CAAC;EACxB,CAAC;;EAED;EACA;EACA;;EAEAsD,KAAK,GAAGA,CAACC,OAA2B,GAAG,CAAC,CAAC,KAAW;IAClD,IAAIA,OAAO,CAACjE,OAAO,KAAK,KAAK,EAAE;MAC7B,IAAI,IAAI,CAACA,OAAO,EAAE,IAAI,CAACkE,IAAI,CAAC,CAAC;MAC7B;IACF;IACA,IAAI,IAAI,CAAClE,OAAO,EAAE;IAElB,IAAIiE,OAAO,CAACvE,WAAW,KAAKwC,SAAS,EAAE;MACrC,IAAI,OAAO+B,OAAO,CAACvE,WAAW,KAAK,QAAQ,IAAIuE,OAAO,CAACvE,WAAW,GAAG,CAAC,EAAE;QACtEjB,IAAI,CACF,mEACF,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACiB,WAAW,GAAGuE,OAAO,CAACvE,WAAW;MACxC;IACF;IACA,IAAIuE,OAAO,CAACtE,WAAW,KAAKuC,SAAS,EAAE;MACrC,IAAI,OAAO+B,OAAO,CAACtE,WAAW,KAAK,QAAQ,IAAIsE,OAAO,CAACtE,WAAW,GAAG,CAAC,EAAE;QACtElB,IAAI,CACF,mEACF,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACkB,WAAW,GAAGsE,OAAO,CAACtE,WAAW;QACtC,IAAI,CAACG,gBAAgB,GAAGxB,QAAQ,CAC9B,MAAM,IAAI,CAACyB,OAAO,CAAC,CAAC,EACpB,IAAI,CAACJ,WACP,CAAC;MACH;IACF;IACA,IAAI,CAACmB,YAAY,GAAGmD,OAAO,CAACnD,YAAY,EAAEe,MAAM,GAC5C,IAAIrC,GAAG,CAACyE,OAAO,CAACnD,YAAY,CAAC,GAC7BoB,SAAS;IACb,IAAI,CAAClB,WAAW,GAAGiD,OAAO,CAACjD,WAAW,EAAEa,MAAM,GAC1C,IAAIrC,GAAG,CAACyE,OAAO,CAACjD,WAAW,CAAC,GAC5BkB,SAAS;IACb,IAAI,CAACjB,eAAe,GAAGgD,OAAO,CAAChD,eAAe,EAAEY,MAAM,GAClDoC,OAAO,CAAChD,eAAe,GACvBiB,SAAS;IAEb7D,cAAc,CAAC8F,YAAY,CAAC;MAC1B9C,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBc,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCI,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBO,iBAAiB,EAAE,IAAI,CAACA,iBAAiB;MACzCQ,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BQ,SAAS,EAAE,IAAI,CAACA;IAClB,CAAC,CAAC;IACFzF,cAAc,CAAC+F,kBAAkB,CAAC,CAAC;IACnC,IAAI,CAACpE,OAAO,GAAG,IAAI;IACnB,IAAI,CAACO,IAAI,CAAC,CAAC;EACb,CAAC;EAED2D,IAAI,GAAGA,CAAA,KAAY;IACjB,IAAI,CAAC,IAAI,CAAClE,OAAO,EAAE;IACnB3B,cAAc,CAACgG,mBAAmB,CAAC,CAAC;IACpC,IAAI,CAACvE,gBAAgB,CAACwE,MAAM,CAAC,CAAC;IAC9B,IAAI,CAACtE,OAAO,GAAG,KAAK;IACpB,IAAI,CAACJ,MAAM,GAAG,KAAK;IACnB,IAAI,CAACT,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACE,OAAO,CAACkF,KAAK,CAAC,CAAC;IACpB,IAAI,CAAC9E,MAAM,GAAG,CAAC;IACf,IAAI,CAACC,WAAW,GAAGhB,oBAAoB;IACvC,IAAI,CAACiB,WAAW,GAAGV,oBAAoB;IACvC,IAAI,CAAC6B,YAAY,GAAGoB,SAAS;IAC7B,IAAI,CAAClB,WAAW,GAAGkB,SAAS;IAC5B,IAAI,CAACjB,eAAe,GAAGiB,SAAS;IAChC,IAAI,CAAC9C,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACS,KAAK,GAAG,KAAK;IAClB,IAAI,CAACU,IAAI,CAAC,CAAC;EACb,CAAC;EAEDiE,WAAW,GAAGA,CAAA,KAAwB,IAAI,CAACpF,QAAQ;EAEnDqF,UAAU,GAAIlD,EAAU,IACtB,IAAI,CAACpC,QAAQ,CAACuF,IAAI,CAAEjD,OAAO,IAAKA,OAAO,CAACF,EAAE,KAAKA,EAAE,CAAC;EAEpDgD,KAAK,GAAGA,CAAA,KAAY;IAClB,IAAI,CAACpF,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACE,OAAO,CAACkF,KAAK,CAAC,CAAC;IACpB,IAAI,CAACnF,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACS,KAAK,GAAG,KAAK;IAClB,IAAI,CAACU,IAAI,CAAC,CAAC;EACb,CAAC;EAEDoE,SAAS,GAAI/E,MAAe,IAAW;IACrC,IAAI,IAAI,CAACA,MAAM,KAAKA,MAAM,EAAE;IAC5B,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACA,MAAM,EAAE;MACX,IAAI,CAACC,KAAK,GAAG,IAAI;MACjB,IAAI,CAACE,OAAO,CAAC,CAAC;IAChB,CAAC,MAAM;MACL,IAAI,CAACQ,IAAI,CAAC,CAAC;IACb;EACF,CAAC;AACH","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":";;AASA,SAASA,gBAAgB,EAAEC,iBAAiB,QAAQ,kBAAe;AACnE,SAASC,QAAQ,QAAuB,iBAAc;AAEtD,MAAMC,SAAS,GAAGA,CAACC,OAAgB,EAAEC,IAAY,KAAyB;EACxE,MAAMC,KAAK,GAAGD,IAAI,CAACE,WAAW,CAAC,CAAC;EAChC,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACN,OAAO,CAAC,EAAE;IACtC,IAAII,GAAG,CAACD,WAAW,CAAC,CAAC,KAAKD,KAAK,EAAE,OAAOF,OAAO,CAACI,GAAG,CAAC;EACtD;EACA,OAAOG,SAAS;AAClB,CAAC;AAED,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,MAAc,EACdC,KAAmB,KACH;EAChB,IAAIA,KAAK,KAAK,QAAQ,EAAE,OAAO,QAAQ;EACvC,IAAIA,KAAK,KAAK,SAAS,IAAID,MAAM,IAAI,CAAC,EAAE,OAAO,SAAS;EACxD,IAAIA,MAAM,GAAG,GAAG,EAAE,OAAO,KAAK;EAC9B,IAAIA,MAAM,GAAG,GAAG,EAAE,OAAO,KAAK;EAC9B,IAAIA,MAAM,GAAG,GAAG,EAAE,OAAO,KAAK;EAC9B,IAAIA,MAAM,GAAG,GAAG,EAAE,OAAO,KAAK;EAC9B,OAAO,KAAK;AACd,CAAC;AAED,eAAe,MAAME,cAAc,CAAC;EAEzBC,IAAI,GAAG,gBAAgB;EAGhCH,MAAM,GAAG,CAAC,CAAC;EACXC,KAAK,GAAiB,SAAS;EAE/BG,cAAc,GAAY,CAAC,CAAC;EAC5BC,eAAe,GAAY,CAAC,CAAC;EAC7BC,QAAQ,GAAY,IAAI;EACxBC,QAAQ,GAAY,IAAI;EACxBC,YAAY,GAAG,EAAE;EACjBC,WAAW,GAAG,EAAE;EAChBC,mBAAmB,GAAG,EAAE;EACxBC,YAAY,GAAG,CAAC;EAChBC,OAAO,GAAG,CAAC;EACXC,SAAS,GAAG,CAAC;EACbC,OAAO,GAAG,CAAC;EAOHC,mBAAmB,GAAG,CAAC,CAAC;EAEhCC,WAAWA,CAACC,EAAU,EAAEC,MAAqB,EAAEC,GAAW,EAAE;IAC1D,IAAI,CAACF,EAAE,GAAGA,EAAE;IACZ,IAAI,CAACC,MAAM,GAAG,CAACA,MAAM,IAAI,KAAK,EAAEE,WAAW,CAAC,CAAC;IAC7C,IAAI,CAACD,GAAG,GAAGA,GAAG;IACd,IAAI,CAACE,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC7B;EAEA,IAAIC,QAAQA,CAAA,EAAW;IACrB,IAAI,CAAC,IAAI,CAACX,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,IAAI,CAACC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B,OAAO,IAAI,CAACA,OAAO,GAAG,IAAI,CAACD,SAAS;EACtC;EAEA,IAAIY,SAASA,CAAA,EAAa;IACxB,IAAI,CAAC,IAAI,CAACC,QAAQ,EAAE,IAAI,CAACA,QAAQ,GAAGrC,QAAQ,CAAC,IAAI,CAAC8B,GAAG,CAAC;IACtD,OAAO,IAAI,CAACO,QAAQ;EACtB;EAEA,IAAIC,IAAIA,CAAA,EAAW;IACjB,OAAO,IAAI,CAACF,SAAS,CAACE,IAAI;EAC5B;EAEA,IAAIC,IAAIA,CAAA,EAAW;IACjB,OAAO,IAAI,CAACH,SAAS,CAACG,IAAI;EAC5B;EAEA,IAAIC,WAAWA,CAAA,EAAgB;IAC7B,OAAO9B,aAAa,CAAC,IAAI,CAACC,MAAM,EAAE,IAAI,CAACC,KAAK,CAAC;EAC/C;EAEA,IAAI6B,kBAAkBA,CAAA,EAAuB;IAC3C,OAAOxC,SAAS,CAAC,IAAI,CAACc,cAAc,EAAE,cAAc,CAAC;EACvD;EAEA2B,MAAMA,CAACC,MAA+B,EAAQ;IAC5CpC,MAAM,CAACqC,MAAM,CAAC,IAAI,EAAED,MAAM,CAAC;IAC3B,IAAI,UAAU,IAAIA,MAAM,EAAE;MACxB,IAAI,CAACE,gBAAgB,GAAGpC,SAAS;MACjC,MAAMqC,IAAI,GAAG,IAAI,CAACC,cAAc,CAAC,CAAC;MAClC,IACED,IAAI,CAACE,IAAI,KAAK,MAAM,IACpBF,IAAI,CAACG,KAAK,IACV,OAAOH,IAAI,CAACG,KAAK,KAAK,QAAQ,EAC9B;QACA,MAAMC,EAAE,GAAIJ,IAAI,CAACG,KAAK,CAAiCE,aAAa;QACpE,IAAI,OAAOD,EAAE,KAAK,QAAQ,EAAE,IAAI,CAACE,YAAY,GAAGF,EAAE;MACpD;IACF;IACA,IAAI,CAAClB,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC7B;EAEAa,cAAcA,CAAA,EAAe;IAC3B,IAAI,CAAC,IAAI,CAACF,gBAAgB,EAAE;MAC1B,IAAI,CAACA,gBAAgB,GAAG/C,gBAAgB,CACtC,IAAI,CAACmB,QAAQ,EACb,IAAI,CAACwB,kBACP,CAAC;IACH;IACA,OAAO,IAAI,CAACI,gBAAgB;EAC9B;;EAEA;AACF;AACA;AACA;EACEQ,eAAeA,CAAA,EAAwB;IACrC,IACE,CAAC,IAAI,CAACC,iBAAiB,IACvB,IAAI,CAAC5B,mBAAmB,KAAK,IAAI,CAACM,SAAS,EAC3C;MACA,IAAI,CAACN,mBAAmB,GAAG,IAAI,CAACM,SAAS;MACzC,IAAI,CAACsB,iBAAiB,GAAGvD,iBAAiB,CACxC,IAAI,CAACmB,QAAQ,EACb,IAAI,CAACC,YAAY,EACjB,IAAI,CAACE,mBACP,CAAC,CAACkC,KAAK,CACL,OACG;QACCP,IAAI,EAAE,MAAM;QACZQ,IAAI,EAAE;MACR,CAAC,CACL,CAAC;IACH;IACA,OAAO,IAAI,CAACF,iBAAiB;EAC/B;EAEA,IAAIG,IAAIA,CAAA,EAAW;IACjB,MAAMC,KAAK,GAAG,CAAC,MAAM,CAAC;IACtB,IAAI,IAAI,CAAC7B,MAAM,KAAK,KAAK,EAAE6B,KAAK,CAACC,IAAI,CAAC,MAAM,IAAI,CAAC9B,MAAM,EAAE,CAAC;IAC1D,KAAK,MAAM,CAACvB,GAAG,EAAE2C,KAAK,CAAC,IAAI1C,MAAM,CAACqD,OAAO,CAAC,IAAI,CAAC7C,cAAc,CAAC,EAAE;MAC9D2C,KAAK,CAACC,IAAI,CAAC,MAAME,UAAU,CAAC,GAAGvD,GAAG,KAAK2C,KAAK,EAAE,CAAC,EAAE,CAAC;IACpD;IACA,MAAMH,IAAI,GAAG,IAAI,CAACC,cAAc,CAAC,CAAC;IAClC,IAAID,IAAI,CAACE,IAAI,KAAK,MAAM,IAAIF,IAAI,CAACE,IAAI,KAAK,MAAM,EAAE;MAChDU,KAAK,CAACC,IAAI,CACR,cAAcE,UAAU,CAACf,IAAI,CAACE,IAAI,KAAK,MAAM,GAAGc,IAAI,CAACC,SAAS,CAACjB,IAAI,CAACG,KAAK,CAAC,GAAGH,IAAI,CAACU,IAAI,CAAC,EACzF,CAAC;IACH,CAAC,MAAM,IAAIV,IAAI,CAACE,IAAI,KAAK,MAAM,EAAE;MAC/B,KAAK,MAAM,CAAC1C,GAAG,EAAE2C,KAAK,CAAC,IAAI1C,MAAM,CAACqD,OAAO,CAACd,IAAI,CAACG,KAAK,CAAC,EAAE;QACrDS,KAAK,CAACC,IAAI,CAAC,MAAME,UAAU,CAAC,GAAGvD,GAAG,IAAI2C,KAAK,EAAE,CAAC,EAAE,CAAC;MACnD;IACF;IACAS,KAAK,CAACC,IAAI,CAACE,UAAU,CAAC,IAAI,CAAC/B,GAAG,CAAC,CAAC;IAChC,OAAO4B,KAAK,CAACM,IAAI,CAAC,SAAS,CAAC;EAC9B;EAEAC,KAAKA,CAAA,EAAsB;IACzB,OAAO;MACLrC,EAAE,EAAE,IAAI,CAACA,EAAE;MACXC,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,GAAG,EAAE,IAAI,CAACA,GAAG;MACbQ,IAAI,EAAE,IAAI,CAACA,IAAI;MACfC,IAAI,EAAE,IAAI,CAACA,IAAI;MACf5B,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,KAAK,EAAE,IAAI,CAACA,KAAK;MACjB4B,WAAW,EAAE,IAAI,CAACA,WAAW;MAC7B0B,aAAa,EAAE,IAAI,CAACA,aAAa;MACjC/B,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBX,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBF,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/B8B,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BpB,SAAS,EAAE,IAAI,CAACA;IAClB,CAAC;EACH;EAEA,MAAMmC,MAAMA,CAAA,EAAqC;IAC/C,MAAMjD,QAAQ,GAAG,MAAM,IAAI,CAACmC,eAAe,CAAC,CAAC;IAC7C,MAAMe,OAAO,GAAG,IAAI,CAACrB,cAAc,CAAC,CAAC;IACrC,OAAO;MACLnB,EAAE,EAAE,IAAI,CAACA,EAAE;MACXC,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,GAAG,EAAE,IAAI,CAACA,GAAG;MACbnB,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBsD,aAAa,EAAE,IAAI,CAACA,aAAa;MACjC1C,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBU,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBpB,cAAc,EAAE,IAAI,CAACA,cAAc;MACnCsD,WAAW,EACTD,OAAO,CAACpB,IAAI,KAAK,MAAM,IAAIoB,OAAO,CAACpB,IAAI,KAAK,MAAM,GAC9CoB,OAAO,CAACnB,KAAK,GACbmB,OAAO,CAACZ,IAAI;MAClBxC,eAAe,EAAE,IAAI,CAACA,eAAe;MACrCsD,YAAY,EACVpD,QAAQ,CAAC8B,IAAI,KAAK,MAAM,IAAI9B,QAAQ,CAAC8B,IAAI,KAAK,MAAM,GAChD9B,QAAQ,CAAC+B,KAAK,GACd/B,QAAQ,CAACsC,IAAI;MACnBlC,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BD,mBAAmB,EAAE,IAAI,CAACA;IAC5B,CAAC;EACH;AACF;AAEA,OAAO,MAAMwC,UAAU,GAAIZ,KAAa,IACtC,IAAIA,KAAK,CAACsB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG","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":"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","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":";;AAEA,MAAMA,cAAc,GAAIC,OAA+B,IACrDC,MAAM,CAACC,OAAO,CAACF,OAAO,CAAC,CAACG,GAAG,CAAC,CAAC,CAACC,IAAI,EAAEC,KAAK,CAAC,MAAM;EAAED,IAAI;EAAEC;AAAM,CAAC,CAAC,CAAC;AAEnE,MAAMC,cAAc,GAAG,MAAOC,OAAuB,IAAK;EACxD,MAAMC,WAAW,GAAGD,OAAO,CAACE,cAAc,CAAC,CAAC;EAC5C,MAAMC,YAAY,GAAG,MAAMH,OAAO,CAACI,eAAe,CAAC,CAAC;EACpD,OAAO;IACLC,eAAe,EAAE,IAAIC,IAAI,CAACN,OAAO,CAACO,SAAS,IAAID,IAAI,CAACE,GAAG,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;IACxEC,IAAI,EAAEC,IAAI,CAACC,GAAG,CAACZ,OAAO,CAACa,QAAQ,EAAE,CAAC,CAAC;IACnCb,OAAO,EAAE;MACPc,MAAM,EAAEd,OAAO,CAACc,MAAM;MACtBC,GAAG,EAAEf,OAAO,CAACe,GAAG,CAACC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;MACtCC,WAAW,EAAE,UAAU;MACvBxB,OAAO,EAAED,cAAc,CAACQ,OAAO,CAACkB,cAAc,CAAC;MAC/CC,WAAW,EAAEzB,MAAM,CAACC,OAAO,CAACK,OAAO,CAACoB,SAAS,CAACC,KAAK,CAAC,CAACzB,GAAG,CACtD,CAAC,CAACC,IAAI,EAAEC,KAAK,CAAC,MAAM;QAClBD,IAAI;QACJC;MACF,CAAC,CACH,CAAC;MACDwB,OAAO,EAAE,EAAE;MACXC,WAAW,EAAE,CAAC,CAAC;MACfC,QAAQ,EAAE,CAAC,CAAC;MACZ,IAAIvB,WAAW,CAACwB,IAAI,KAAK,OAAO,GAC5B;QACEC,QAAQ,EAAE;UACRC,QAAQ,EAAE3B,OAAO,CAAC4B,kBAAkB,IAAI,YAAY;UACpDC,IAAI,EAAE5B,WAAW,CAAC4B;QACpB;MACF,CAAC,GACD,CAAC,CAAC;IACR,CAAC;IACDC,QAAQ,EAAE;MACRC,MAAM,EAAEpB,IAAI,CAACC,GAAG,CAACZ,OAAO,CAAC+B,MAAM,EAAE,CAAC,CAAC;MACnCC,UAAU,EAAE,EAAE;MACdf,WAAW,EAAE,UAAU;MACvBxB,OAAO,EAAED,cAAc,CAACQ,OAAO,CAACiC,eAAe,CAAC;MAChDX,OAAO,EAAE,EAAE;MACXY,OAAO,EAAE;QACPC,IAAI,EAAEnC,OAAO,CAACoC,YAAY,IAAI,CAAC,CAAC;QAChCT,QAAQ,EAAE3B,OAAO,CAACqC,mBAAmB,IAAI,YAAY;QACrDR,IAAI,EAAE1B,YAAY,CAAC0B;MACrB,CAAC;MACDS,WAAW,EAAE,EAAE;MACff,WAAW,EAAE,CAAC,CAAC;MACfC,QAAQ,EAAE,CAAC;IACb,CAAC;IACDe,KAAK,EAAE,CAAC,CAAC;IACTC,OAAO,EAAE;MACPC,OAAO,EAAE,CAAC,CAAC;MACXC,GAAG,EAAE,CAAC,CAAC;MACPC,GAAG,EAAE,CAAC,CAAC;MACPC,OAAO,EAAE,CAAC,CAAC;MACXC,IAAI,EAAE,CAAC;MACPC,IAAI,EAAEnC,IAAI,CAACC,GAAG,CAACZ,OAAO,CAACa,QAAQ,EAAE,CAAC,CAAC;MACnCkC,OAAO,EAAE;IACX;EACF,CAAC;AACH,CAAC;;AAED;AACA,OAAO,MAAMC,SAAS,GAAG,MAAOC,QAA0B,KAAM;EAC9DC,GAAG,EAAE;IACHC,OAAO,EAAE,KAAK;IACdC,OAAO,EAAE;MAAEvD,IAAI,EAAE,2BAA2B;MAAEsD,OAAO,EAAE;IAAM,CAAC;IAC9DE,KAAK,EAAE,EAAE;IACT1D,OAAO,EAAE,MAAM2D,OAAO,CAACC,GAAG,CAACN,QAAQ,CAACrD,GAAG,CAACG,cAAc,CAAC;EACzD;AACF,CAAC,CAAC","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":[]}
|