rn-backstage 1.0.0 → 1.2.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.
- package/README.md +74 -23
- package/lib/commonjs/Backstage.js +55 -5
- package/lib/commonjs/Backstage.js.map +1 -1
- package/lib/commonjs/components/BackstagePanel.js +36 -5
- package/lib/commonjs/components/BackstagePanel.js.map +1 -1
- package/lib/commonjs/components/FlagsTab.js +255 -0
- package/lib/commonjs/components/FlagsTab.js.map +1 -0
- package/lib/commonjs/components/NetworkItem.js +537 -0
- package/lib/commonjs/components/NetworkItem.js.map +1 -0
- package/lib/commonjs/components/NetworkTab.js +274 -0
- package/lib/commonjs/components/NetworkTab.js.map +1 -0
- package/lib/commonjs/constants.js +11 -3
- package/lib/commonjs/constants.js.map +1 -1
- package/lib/commonjs/index.js +6 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/log-interceptor.js +8 -1
- package/lib/commonjs/log-interceptor.js.map +1 -1
- package/lib/commonjs/network-interceptor.js +417 -0
- package/lib/commonjs/network-interceptor.js.map +1 -0
- package/lib/commonjs/types.js +9 -1
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/Backstage.js +56 -6
- package/lib/module/Backstage.js.map +1 -1
- package/lib/module/components/BackstagePanel.js +36 -5
- package/lib/module/components/BackstagePanel.js.map +1 -1
- package/lib/module/components/FlagsTab.js +250 -0
- package/lib/module/components/FlagsTab.js.map +1 -0
- package/lib/module/components/NetworkItem.js +532 -0
- package/lib/module/components/NetworkItem.js.map +1 -0
- package/lib/module/components/NetworkTab.js +269 -0
- package/lib/module/components/NetworkTab.js.map +1 -0
- package/lib/module/constants.js +10 -2
- package/lib/module/constants.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/log-interceptor.js +8 -1
- package/lib/module/log-interceptor.js.map +1 -1
- package/lib/module/network-interceptor.js +409 -0
- package/lib/module/network-interceptor.js.map +1 -0
- package/lib/module/types.js +10 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/Backstage.d.ts.map +1 -1
- package/lib/typescript/components/BackstagePanel.d.ts +7 -1
- package/lib/typescript/components/BackstagePanel.d.ts.map +1 -1
- package/lib/typescript/components/FlagsTab.d.ts +9 -0
- package/lib/typescript/components/FlagsTab.d.ts.map +1 -0
- package/lib/typescript/components/NetworkItem.d.ts +9 -0
- package/lib/typescript/components/NetworkItem.d.ts.map +1 -0
- package/lib/typescript/components/NetworkTab.d.ts +11 -0
- package/lib/typescript/components/NetworkTab.d.ts.map +1 -0
- package/lib/typescript/constants.d.ts +8 -0
- package/lib/typescript/constants.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/log-interceptor.d.ts +3 -1
- package/lib/typescript/log-interceptor.d.ts.map +1 -1
- package/lib/typescript/network-interceptor.d.ts +35 -0
- package/lib/typescript/network-interceptor.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +46 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Backstage.tsx +64 -6
- package/src/components/BackstagePanel.tsx +46 -5
- package/src/components/FlagsTab.tsx +249 -0
- package/src/components/InfoTab.tsx +1 -1
- package/src/components/NetworkItem.tsx +536 -0
- package/src/components/NetworkTab.tsx +274 -0
- package/src/constants.ts +11 -2
- package/src/index.ts +3 -1
- package/src/log-interceptor.ts +12 -1
- package/src/network-interceptor.ts +468 -0
- package/src/types.ts +60 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.NetworkBuffer = void 0;
|
|
7
|
+
exports.installNetworkInterceptor = installNetworkInterceptor;
|
|
8
|
+
exports.isInsideNetworkCallback = isInsideNetworkCallback;
|
|
9
|
+
exports.toCurl = toCurl;
|
|
10
|
+
exports.uninstallNetworkInterceptor = uninstallNetworkInterceptor;
|
|
11
|
+
var _types = require("./types");
|
|
12
|
+
var _constants = require("./constants");
|
|
13
|
+
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
// ─── State ───────────────────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
let activeCallback = null;
|
|
18
|
+
let isInstalled = false;
|
|
19
|
+
let interceptorOptions = {};
|
|
20
|
+
|
|
21
|
+
// Track if we're inside a network callback context.
|
|
22
|
+
// Used by the log interceptor to auto-filter network-related console.logs.
|
|
23
|
+
let _activeNetworkCallbacks = 0;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Returns true if the current call stack originated from within a network
|
|
27
|
+
* response handler (XHR load/error, fetch .then()). Used by the log
|
|
28
|
+
* interceptor to suppress network-related console.logs from the Logs tab.
|
|
29
|
+
*/
|
|
30
|
+
function isInsideNetworkCallback() {
|
|
31
|
+
return _activeNetworkCallbacks > 0;
|
|
32
|
+
}
|
|
33
|
+
function enterNetworkContext() {
|
|
34
|
+
_activeNetworkCallbacks++;
|
|
35
|
+
}
|
|
36
|
+
function exitNetworkContext() {
|
|
37
|
+
// Defer decrement through microtask queue so developer's .then() chains
|
|
38
|
+
// that fire after our return are also covered.
|
|
39
|
+
queueMicrotask(() => {
|
|
40
|
+
_activeNetworkCallbacks--;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Store originals before patching
|
|
45
|
+
const originals = {
|
|
46
|
+
fetch: null,
|
|
47
|
+
XMLHttpRequest: null
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
function generateId() {
|
|
53
|
+
return `net_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
54
|
+
}
|
|
55
|
+
function shouldCapture(url, filters) {
|
|
56
|
+
if (filters.length === 0) return true;
|
|
57
|
+
const lower = url.toLowerCase();
|
|
58
|
+
return !filters.some(f => lower.includes(f.toLowerCase()));
|
|
59
|
+
}
|
|
60
|
+
function truncateBody(body, maxSize) {
|
|
61
|
+
if (!body) return undefined;
|
|
62
|
+
const limit = maxSize ?? _constants.DEFAULT_MAX_NETWORK_BODY_SIZE;
|
|
63
|
+
if (body.length <= limit) return body;
|
|
64
|
+
return body.substring(0, limit) + '\n... [truncated]';
|
|
65
|
+
}
|
|
66
|
+
function parseHeaders(headers) {
|
|
67
|
+
if (!headers) return undefined;
|
|
68
|
+
const result = {};
|
|
69
|
+
headers.forEach((value, key) => {
|
|
70
|
+
result[key] = value;
|
|
71
|
+
});
|
|
72
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Generates a cURL command string from a NetworkEntry.
|
|
77
|
+
*/
|
|
78
|
+
function toCurl(entry) {
|
|
79
|
+
const parts = ['curl'];
|
|
80
|
+
|
|
81
|
+
// Method
|
|
82
|
+
if (entry.method && entry.method !== 'GET') {
|
|
83
|
+
parts.push(`-X ${entry.method}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Request headers
|
|
87
|
+
if (entry.requestHeaders) {
|
|
88
|
+
for (const [key, value] of Object.entries(entry.requestHeaders)) {
|
|
89
|
+
parts.push(`-H '${key}: ${value}'`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Request body
|
|
94
|
+
if (entry.requestBody) {
|
|
95
|
+
// Escape single quotes in body
|
|
96
|
+
const escaped = entry.requestBody.replace(/'/g, "'\\''");
|
|
97
|
+
parts.push(`-d '${escaped}'`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// URL (must be last)
|
|
101
|
+
parts.push(`'${entry.url}'`);
|
|
102
|
+
return parts.join(' \\\n ');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ─── Fetch Interceptor ──────────────────────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
function installFetchInterceptor() {
|
|
108
|
+
const originalFetch = global.fetch;
|
|
109
|
+
if (!originalFetch) return;
|
|
110
|
+
originals.fetch = originalFetch;
|
|
111
|
+
global.fetch = async function interceptedFetch(input, init) {
|
|
112
|
+
const url = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
|
|
113
|
+
const method = init?.method ?? (typeof input !== 'string' && !(input instanceof URL) ? input.method : 'GET') ?? 'GET';
|
|
114
|
+
|
|
115
|
+
// Check filters
|
|
116
|
+
if (!shouldCapture(url, interceptorOptions.filters ?? [])) {
|
|
117
|
+
return originalFetch(input, init);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Build entry
|
|
121
|
+
const entry = {
|
|
122
|
+
id: generateId(),
|
|
123
|
+
method: method.toUpperCase(),
|
|
124
|
+
url,
|
|
125
|
+
startTime: Date.now(),
|
|
126
|
+
state: _types.NetworkState.pending
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
// Capture request headers
|
|
130
|
+
if (init?.headers) {
|
|
131
|
+
try {
|
|
132
|
+
const h = new Headers(init.headers);
|
|
133
|
+
entry.requestHeaders = parseHeaders(h);
|
|
134
|
+
} catch {
|
|
135
|
+
// Skip if headers can't be parsed
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Capture request body
|
|
140
|
+
if (init?.body) {
|
|
141
|
+
try {
|
|
142
|
+
entry.requestBody = truncateBody(typeof init.body === 'string' ? init.body : JSON.stringify(init.body), interceptorOptions.maxBodySize);
|
|
143
|
+
} catch {
|
|
144
|
+
entry.requestBody = '[unable to serialize body]';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Notify: request started
|
|
149
|
+
activeCallback?.(entry);
|
|
150
|
+
try {
|
|
151
|
+
const response = await originalFetch(input, init);
|
|
152
|
+
entry.endTime = Date.now();
|
|
153
|
+
entry.duration = entry.endTime - entry.startTime;
|
|
154
|
+
entry.status = response.status;
|
|
155
|
+
entry.statusText = response.statusText;
|
|
156
|
+
entry.responseHeaders = parseHeaders(response.headers);
|
|
157
|
+
entry.state = _types.NetworkState.completed;
|
|
158
|
+
|
|
159
|
+
// Clone response to read body without consuming it
|
|
160
|
+
try {
|
|
161
|
+
const clone = response.clone();
|
|
162
|
+
const text = await clone.text();
|
|
163
|
+
entry.responseSize = text.length;
|
|
164
|
+
entry.responseBody = truncateBody(text, interceptorOptions.maxBodySize);
|
|
165
|
+
} catch {
|
|
166
|
+
// Body may not be readable (e.g., stream already consumed)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Notify: request completed
|
|
170
|
+
activeCallback?.(entry);
|
|
171
|
+
|
|
172
|
+
// Mark network context so developer's .then() console.logs are filtered
|
|
173
|
+
enterNetworkContext();
|
|
174
|
+
|
|
175
|
+
// Return the ORIGINAL response untouched
|
|
176
|
+
// Developer's .then() runs in the next microtask — exitNetworkContext
|
|
177
|
+
// defers via queueMicrotask to cover it.
|
|
178
|
+
const result = response;
|
|
179
|
+
exitNetworkContext();
|
|
180
|
+
return result;
|
|
181
|
+
} catch (err) {
|
|
182
|
+
entry.endTime = Date.now();
|
|
183
|
+
entry.duration = entry.endTime - entry.startTime;
|
|
184
|
+
entry.state = _types.NetworkState.error;
|
|
185
|
+
entry.error = err instanceof Error ? err.message : String(err);
|
|
186
|
+
|
|
187
|
+
// Notify: request failed
|
|
188
|
+
activeCallback?.(entry);
|
|
189
|
+
|
|
190
|
+
// Re-throw the original error
|
|
191
|
+
throw err;
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// ─── XMLHttpRequest Interceptor ──────────────────────────────────────────────
|
|
197
|
+
|
|
198
|
+
function installXHRInterceptor() {
|
|
199
|
+
const OriginalXHR = global.XMLHttpRequest;
|
|
200
|
+
if (!OriginalXHR) return;
|
|
201
|
+
originals.XMLHttpRequest = OriginalXHR;
|
|
202
|
+
global.XMLHttpRequest = function InterceptedXHR() {
|
|
203
|
+
const xhr = new OriginalXHR();
|
|
204
|
+
const entry = {
|
|
205
|
+
id: generateId(),
|
|
206
|
+
method: 'GET',
|
|
207
|
+
url: '',
|
|
208
|
+
startTime: Date.now(),
|
|
209
|
+
state: _types.NetworkState.pending,
|
|
210
|
+
requestHeaders: {}
|
|
211
|
+
};
|
|
212
|
+
let shouldTrack = true;
|
|
213
|
+
|
|
214
|
+
// Intercept open()
|
|
215
|
+
const originalOpen = xhr.open.bind(xhr);
|
|
216
|
+
xhr.open = function (method, url, ...rest) {
|
|
217
|
+
entry.method = method.toUpperCase();
|
|
218
|
+
entry.url = url;
|
|
219
|
+
shouldTrack = shouldCapture(url, interceptorOptions.filters ?? []);
|
|
220
|
+
// @ts-expect-error — forwarding args to original
|
|
221
|
+
return originalOpen(method, url, ...rest);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
// Intercept setRequestHeader()
|
|
225
|
+
const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);
|
|
226
|
+
xhr.setRequestHeader = function (name, value) {
|
|
227
|
+
if (shouldTrack && entry.requestHeaders) {
|
|
228
|
+
entry.requestHeaders[name] = value;
|
|
229
|
+
}
|
|
230
|
+
return originalSetRequestHeader(name, value);
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
// Intercept send()
|
|
234
|
+
const originalSend = xhr.send.bind(xhr);
|
|
235
|
+
xhr.send = function (body) {
|
|
236
|
+
if (!shouldTrack) {
|
|
237
|
+
return originalSend(body);
|
|
238
|
+
}
|
|
239
|
+
entry.startTime = Date.now();
|
|
240
|
+
|
|
241
|
+
// Capture request body
|
|
242
|
+
if (body) {
|
|
243
|
+
try {
|
|
244
|
+
entry.requestBody = truncateBody(typeof body === 'string' ? body : JSON.stringify(body), interceptorOptions.maxBodySize);
|
|
245
|
+
} catch {
|
|
246
|
+
entry.requestBody = '[unable to serialize body]';
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Clean up empty request headers
|
|
251
|
+
if (entry.requestHeaders && Object.keys(entry.requestHeaders).length === 0) {
|
|
252
|
+
entry.requestHeaders = undefined;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Notify: request started
|
|
256
|
+
activeCallback?.(entry);
|
|
257
|
+
|
|
258
|
+
// Listen for completion
|
|
259
|
+
xhr.addEventListener('load', () => {
|
|
260
|
+
enterNetworkContext();
|
|
261
|
+
entry.endTime = Date.now();
|
|
262
|
+
entry.duration = entry.endTime - entry.startTime;
|
|
263
|
+
entry.status = xhr.status;
|
|
264
|
+
entry.statusText = xhr.statusText;
|
|
265
|
+
entry.state = _types.NetworkState.completed;
|
|
266
|
+
|
|
267
|
+
// Parse response headers
|
|
268
|
+
const rawHeaders = xhr.getAllResponseHeaders();
|
|
269
|
+
if (rawHeaders) {
|
|
270
|
+
const parsed = {};
|
|
271
|
+
rawHeaders.trim().split(/[\r\n]+/).forEach(line => {
|
|
272
|
+
const idx = line.indexOf(': ');
|
|
273
|
+
if (idx > 0) {
|
|
274
|
+
parsed[line.substring(0, idx).toLowerCase()] = line.substring(idx + 2);
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
entry.responseHeaders = Object.keys(parsed).length > 0 ? parsed : undefined;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Capture response body
|
|
281
|
+
try {
|
|
282
|
+
const responseText = xhr.responseType === '' || xhr.responseType === 'text' ? xhr.responseText : JSON.stringify(xhr.response);
|
|
283
|
+
entry.responseSize = responseText?.length;
|
|
284
|
+
entry.responseBody = truncateBody(responseText, interceptorOptions.maxBodySize);
|
|
285
|
+
} catch {
|
|
286
|
+
// Response may not be text-readable
|
|
287
|
+
}
|
|
288
|
+
activeCallback?.(entry);
|
|
289
|
+
exitNetworkContext();
|
|
290
|
+
});
|
|
291
|
+
xhr.addEventListener('error', () => {
|
|
292
|
+
enterNetworkContext();
|
|
293
|
+
entry.endTime = Date.now();
|
|
294
|
+
entry.duration = entry.endTime - entry.startTime;
|
|
295
|
+
entry.state = _types.NetworkState.error;
|
|
296
|
+
entry.error = 'Network request failed';
|
|
297
|
+
activeCallback?.(entry);
|
|
298
|
+
exitNetworkContext();
|
|
299
|
+
});
|
|
300
|
+
xhr.addEventListener('timeout', () => {
|
|
301
|
+
enterNetworkContext();
|
|
302
|
+
entry.endTime = Date.now();
|
|
303
|
+
entry.duration = entry.endTime - entry.startTime;
|
|
304
|
+
entry.state = _types.NetworkState.error;
|
|
305
|
+
entry.error = 'Request timed out';
|
|
306
|
+
activeCallback?.(entry);
|
|
307
|
+
exitNetworkContext();
|
|
308
|
+
});
|
|
309
|
+
xhr.addEventListener('abort', () => {
|
|
310
|
+
enterNetworkContext();
|
|
311
|
+
entry.endTime = Date.now();
|
|
312
|
+
entry.duration = entry.endTime - entry.startTime;
|
|
313
|
+
entry.state = _types.NetworkState.error;
|
|
314
|
+
entry.error = 'Request aborted';
|
|
315
|
+
activeCallback?.(entry);
|
|
316
|
+
exitNetworkContext();
|
|
317
|
+
});
|
|
318
|
+
return originalSend(body);
|
|
319
|
+
};
|
|
320
|
+
return xhr;
|
|
321
|
+
};
|
|
322
|
+
|
|
323
|
+
// Copy static properties and prototype
|
|
324
|
+
Object.defineProperty(global.XMLHttpRequest, 'UNSENT', {
|
|
325
|
+
value: 0
|
|
326
|
+
});
|
|
327
|
+
Object.defineProperty(global.XMLHttpRequest, 'OPENED', {
|
|
328
|
+
value: 1
|
|
329
|
+
});
|
|
330
|
+
Object.defineProperty(global.XMLHttpRequest, 'HEADERS_RECEIVED', {
|
|
331
|
+
value: 2
|
|
332
|
+
});
|
|
333
|
+
Object.defineProperty(global.XMLHttpRequest, 'LOADING', {
|
|
334
|
+
value: 3
|
|
335
|
+
});
|
|
336
|
+
Object.defineProperty(global.XMLHttpRequest, 'DONE', {
|
|
337
|
+
value: 4
|
|
338
|
+
});
|
|
339
|
+
global.XMLHttpRequest.prototype = OriginalXHR.prototype;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// ─── Install / Uninstall ─────────────────────────────────────────────────────
|
|
343
|
+
|
|
344
|
+
function installNetworkInterceptor(callback, options = {}) {
|
|
345
|
+
if (isInstalled) {
|
|
346
|
+
// Update callback and options if already installed
|
|
347
|
+
activeCallback = callback;
|
|
348
|
+
interceptorOptions = options;
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
activeCallback = callback;
|
|
352
|
+
interceptorOptions = options;
|
|
353
|
+
isInstalled = true;
|
|
354
|
+
installFetchInterceptor();
|
|
355
|
+
installXHRInterceptor();
|
|
356
|
+
}
|
|
357
|
+
function uninstallNetworkInterceptor() {
|
|
358
|
+
if (!isInstalled) return;
|
|
359
|
+
|
|
360
|
+
// Restore originals
|
|
361
|
+
if (originals.fetch) {
|
|
362
|
+
global.fetch = originals.fetch;
|
|
363
|
+
originals.fetch = null;
|
|
364
|
+
}
|
|
365
|
+
if (originals.XMLHttpRequest) {
|
|
366
|
+
global.XMLHttpRequest = originals.XMLHttpRequest;
|
|
367
|
+
originals.XMLHttpRequest = null;
|
|
368
|
+
}
|
|
369
|
+
activeCallback = null;
|
|
370
|
+
isInstalled = false;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// ─── Network Buffer ──────────────────────────────────────────────────────────
|
|
374
|
+
|
|
375
|
+
class NetworkBuffer {
|
|
376
|
+
entries = new Map();
|
|
377
|
+
order = [];
|
|
378
|
+
constructor(maxSize = _constants.DEFAULT_MAX_NETWORK_ENTRIES) {
|
|
379
|
+
this.maxSize = maxSize;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Upsert a network entry. If the entry already exists (same id),
|
|
384
|
+
* update it in place (e.g., pending → completed). Otherwise add new.
|
|
385
|
+
*/
|
|
386
|
+
upsert(entry) {
|
|
387
|
+
if (this.entries.has(entry.id)) {
|
|
388
|
+
// Update existing entry (pending → completed/error)
|
|
389
|
+
this.entries.set(entry.id, entry);
|
|
390
|
+
} else {
|
|
391
|
+
// Add new entry at the front
|
|
392
|
+
this.order.unshift(entry.id);
|
|
393
|
+
this.entries.set(entry.id, entry);
|
|
394
|
+
|
|
395
|
+
// Evict oldest if over capacity
|
|
396
|
+
while (this.order.length > this.maxSize) {
|
|
397
|
+
const oldId = this.order.pop();
|
|
398
|
+
if (oldId) this.entries.delete(oldId);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
getAll() {
|
|
403
|
+
return this.order.map(id => this.entries.get(id)).filter(Boolean);
|
|
404
|
+
}
|
|
405
|
+
clear() {
|
|
406
|
+
this.entries.clear();
|
|
407
|
+
this.order = [];
|
|
408
|
+
}
|
|
409
|
+
get hasErrors() {
|
|
410
|
+
return this.order.some(id => this.entries.get(id)?.state === _types.NetworkState.error);
|
|
411
|
+
}
|
|
412
|
+
get size() {
|
|
413
|
+
return this.order.length;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
exports.NetworkBuffer = NetworkBuffer;
|
|
417
|
+
//# sourceMappingURL=network-interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_types","require","_constants","activeCallback","isInstalled","interceptorOptions","_activeNetworkCallbacks","isInsideNetworkCallback","enterNetworkContext","exitNetworkContext","queueMicrotask","originals","fetch","XMLHttpRequest","generateId","Date","now","Math","random","toString","substring","shouldCapture","url","filters","length","lower","toLowerCase","some","f","includes","truncateBody","body","maxSize","undefined","limit","DEFAULT_MAX_NETWORK_BODY_SIZE","parseHeaders","headers","result","forEach","value","key","Object","keys","toCurl","entry","parts","method","push","requestHeaders","entries","requestBody","escaped","replace","join","installFetchInterceptor","originalFetch","global","interceptedFetch","input","init","URL","id","toUpperCase","startTime","state","NetworkState","pending","h","Headers","JSON","stringify","maxBodySize","response","endTime","duration","status","statusText","responseHeaders","completed","clone","text","responseSize","responseBody","err","error","Error","message","String","installXHRInterceptor","OriginalXHR","InterceptedXHR","xhr","shouldTrack","originalOpen","open","bind","rest","originalSetRequestHeader","setRequestHeader","name","originalSend","send","addEventListener","rawHeaders","getAllResponseHeaders","parsed","trim","split","line","idx","indexOf","responseText","responseType","defineProperty","prototype","installNetworkInterceptor","callback","options","uninstallNetworkInterceptor","NetworkBuffer","Map","order","constructor","DEFAULT_MAX_NETWORK_ENTRIES","upsert","has","set","unshift","oldId","pop","delete","getAll","map","get","filter","Boolean","clear","hasErrors","size","exports"],"sourceRoot":"../../src","sources":["network-interceptor.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/commonjs/types.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.LogLevel = void 0;
|
|
6
|
+
exports.NetworkState = exports.LogLevel = void 0;
|
|
7
7
|
// ─── Log Types ───────────────────────────────────────────────────────────────
|
|
8
8
|
let LogLevel = exports.LogLevel = /*#__PURE__*/function (LogLevel) {
|
|
9
9
|
LogLevel["log"] = "log";
|
|
@@ -12,8 +12,16 @@ let LogLevel = exports.LogLevel = /*#__PURE__*/function (LogLevel) {
|
|
|
12
12
|
LogLevel["warn"] = "warn";
|
|
13
13
|
LogLevel["error"] = "error";
|
|
14
14
|
return LogLevel;
|
|
15
|
+
}({});
|
|
16
|
+
// ─── Network Types ───────────────────────────────────────────────────────────
|
|
17
|
+
let NetworkState = exports.NetworkState = /*#__PURE__*/function (NetworkState) {
|
|
18
|
+
NetworkState["pending"] = "pending";
|
|
19
|
+
NetworkState["completed"] = "completed";
|
|
20
|
+
NetworkState["error"] = "error";
|
|
21
|
+
return NetworkState;
|
|
15
22
|
}({}); // ─── App Info ────────────────────────────────────────────────────────────────
|
|
16
23
|
// ─── Quick Actions ───────────────────────────────────────────────────────────
|
|
24
|
+
// ─── Feature Flags ─────────────────────────────────────────────────────────
|
|
17
25
|
// ─── Extensible Tabs ─────────────────────────────────────────────────────────
|
|
18
26
|
// ─── Theme ───────────────────────────────────────────────────────────────────
|
|
19
27
|
// ─── Main Props ──────────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LogLevel","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAGA;AAAA,IAEYA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA,
|
|
1
|
+
{"version":3,"names":["LogLevel","exports","NetworkState"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAGA;AAAA,IAEYA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAgBpB;AAAA,IAEYE,YAAY,GAAAD,OAAA,CAAAC,YAAA,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA,OAwBxB;AAOA;AAWA;AAaA;AASA;AAuBA;AAuFA","ignoreList":[]}
|
package/lib/module/Backstage.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from 'react';
|
|
4
4
|
import { StyleSheet, View } from 'react-native';
|
|
5
|
-
import { DEFAULT_MAX_LOGS } from './constants';
|
|
5
|
+
import { DEFAULT_MAX_LOGS, DEFAULT_MAX_NETWORK_ENTRIES } from './constants';
|
|
6
6
|
import { installInterceptor, LogBuffer, uninstallInterceptor } from './log-interceptor';
|
|
7
|
+
import { installNetworkInterceptor, NetworkBuffer, uninstallNetworkInterceptor } from './network-interceptor';
|
|
7
8
|
import { FloatingPill } from './components/FloatingPill';
|
|
8
9
|
import { BackstagePanel } from './components/BackstagePanel';
|
|
9
10
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -17,6 +18,8 @@ export const Backstage = /*#__PURE__*/forwardRef(({
|
|
|
17
18
|
deviceInfo,
|
|
18
19
|
state,
|
|
19
20
|
quickActions,
|
|
21
|
+
featureFlags,
|
|
22
|
+
onToggleFeatureFlag,
|
|
20
23
|
maxLogs = DEFAULT_MAX_LOGS,
|
|
21
24
|
logFilters,
|
|
22
25
|
onCopyLogs,
|
|
@@ -25,19 +28,27 @@ export const Backstage = /*#__PURE__*/forwardRef(({
|
|
|
25
28
|
styles: propStyles,
|
|
26
29
|
initialX,
|
|
27
30
|
initialY,
|
|
28
|
-
pillText
|
|
31
|
+
pillText,
|
|
32
|
+
enableNetworkInspector = true,
|
|
33
|
+
maxNetworkEntries = DEFAULT_MAX_NETWORK_ENTRIES,
|
|
34
|
+
maxNetworkBodySize,
|
|
35
|
+
networkFilters,
|
|
36
|
+
autoFilterNetworkLogs = true
|
|
29
37
|
}, ref) => {
|
|
30
38
|
const [panelVisible, setPanelVisible] = useState(false);
|
|
31
39
|
const [hasError, setHasError] = useState(false);
|
|
32
40
|
const [logs, setLogs] = useState([]);
|
|
41
|
+
const [networkEntries, setNetworkEntries] = useState([]);
|
|
33
42
|
const logBuffer = useRef(new LogBuffer(maxLogs));
|
|
43
|
+
const networkBuffer = useRef(new NetworkBuffer(maxNetworkEntries));
|
|
34
44
|
|
|
35
45
|
// ── Panel controls ────────────────────────────────────────
|
|
36
46
|
|
|
37
47
|
const openPanel = useCallback(() => {
|
|
38
48
|
setPanelVisible(true);
|
|
39
|
-
// Sync logs when opening panel
|
|
49
|
+
// Sync logs and network entries when opening panel
|
|
40
50
|
setLogs(logBuffer.current.getAll());
|
|
51
|
+
setNetworkEntries(networkBuffer.current.getAll());
|
|
41
52
|
}, []);
|
|
42
53
|
const closePanel = useCallback(() => {
|
|
43
54
|
setPanelVisible(false);
|
|
@@ -48,12 +59,22 @@ export const Backstage = /*#__PURE__*/forwardRef(({
|
|
|
48
59
|
setHasError(false);
|
|
49
60
|
}, []);
|
|
50
61
|
|
|
51
|
-
// ── Refresh logs
|
|
62
|
+
// ── Refresh logs ──────────────────────────────────────────────────
|
|
52
63
|
|
|
53
64
|
const refreshLogs = useCallback(() => {
|
|
54
65
|
setLogs(logBuffer.current.getAll());
|
|
55
66
|
}, []);
|
|
56
67
|
|
|
68
|
+
// ── Network controls ──────────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
const refreshNetwork = useCallback(() => {
|
|
71
|
+
setNetworkEntries(networkBuffer.current.getAll());
|
|
72
|
+
}, []);
|
|
73
|
+
const clearNetwork = useCallback(() => {
|
|
74
|
+
networkBuffer.current.clear();
|
|
75
|
+
setNetworkEntries([]);
|
|
76
|
+
}, []);
|
|
77
|
+
|
|
57
78
|
// ── Install console interceptor ───────────────────────────
|
|
58
79
|
|
|
59
80
|
useEffect(() => {
|
|
@@ -65,11 +86,34 @@ export const Backstage = /*#__PURE__*/forwardRef(({
|
|
|
65
86
|
setHasError(true);
|
|
66
87
|
}
|
|
67
88
|
};
|
|
68
|
-
installInterceptor(handleLogEntry, logFilters
|
|
89
|
+
installInterceptor(handleLogEntry, logFilters, {
|
|
90
|
+
autoFilterNetworkLogs: enableNetworkInspector && autoFilterNetworkLogs
|
|
91
|
+
});
|
|
69
92
|
return () => {
|
|
70
93
|
uninstallInterceptor();
|
|
71
94
|
};
|
|
72
|
-
}, [logFilters]);
|
|
95
|
+
}, [logFilters, enableNetworkInspector, autoFilterNetworkLogs]);
|
|
96
|
+
|
|
97
|
+
// ── Install network interceptor ───────────────────────────────
|
|
98
|
+
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (!enableNetworkInspector) return;
|
|
101
|
+
const handleNetworkEntry = entry => {
|
|
102
|
+
networkBuffer.current.upsert(entry);
|
|
103
|
+
|
|
104
|
+
// Auto-refresh if panel is open
|
|
105
|
+
if (panelVisible) {
|
|
106
|
+
setNetworkEntries(networkBuffer.current.getAll());
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
installNetworkInterceptor(handleNetworkEntry, {
|
|
110
|
+
filters: networkFilters,
|
|
111
|
+
maxBodySize: maxNetworkBodySize
|
|
112
|
+
});
|
|
113
|
+
return () => {
|
|
114
|
+
uninstallNetworkInterceptor();
|
|
115
|
+
};
|
|
116
|
+
}, [enableNetworkInspector, networkFilters, maxNetworkBodySize, panelVisible]);
|
|
73
117
|
|
|
74
118
|
// ── Expose ref methods ────────────────────────────────────
|
|
75
119
|
|
|
@@ -102,9 +146,15 @@ export const Backstage = /*#__PURE__*/forwardRef(({
|
|
|
102
146
|
deviceInfo: deviceInfo,
|
|
103
147
|
state: state,
|
|
104
148
|
quickActions: quickActions,
|
|
149
|
+
featureFlags: featureFlags,
|
|
150
|
+
onToggleFeatureFlag: onToggleFeatureFlag,
|
|
105
151
|
logs: logs,
|
|
106
152
|
onRefreshLogs: refreshLogs,
|
|
107
153
|
onCopyLogs: onCopyLogs,
|
|
154
|
+
networkEntries: networkEntries,
|
|
155
|
+
onRefreshNetwork: refreshNetwork,
|
|
156
|
+
onClearNetwork: clearNetwork,
|
|
157
|
+
onCopyNetwork: onCopyLogs,
|
|
108
158
|
extraTabs: extraTabs,
|
|
109
159
|
styles: propStyles,
|
|
110
160
|
children: children
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","StyleSheet","View","DEFAULT_MAX_LOGS","installInterceptor","LogBuffer","uninstallInterceptor","FloatingPill","BackstagePanel","jsx","_jsx","jsxs","_jsxs","Backstage","visible","appVersion","buildNumber","bundleId","deviceInfo","state","quickActions","maxLogs","logFilters","onCopyLogs","extraTabs","children","styles","propStyles","initialX","initialY","pillText","ref","panelVisible","setPanelVisible","hasError","setHasError","logs","setLogs","logBuffer","openPanel","current","getAll","closePanel","clearLogs","clear","refreshLogs","handleLogEntry","entry","push","level","open","close","displayText","style","container","pointerEvents","text","onPress","onClose","onRefreshLogs","displayName","create","absoluteFillObject","zIndex","elevation"],"sourceRoot":"../../src","sources":["Backstage.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IACVC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,mBAAmB,EACnBC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,SAASC,gBAAgB,QAAQ,aAAa;
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","useState","StyleSheet","View","DEFAULT_MAX_LOGS","DEFAULT_MAX_NETWORK_ENTRIES","installInterceptor","LogBuffer","uninstallInterceptor","installNetworkInterceptor","NetworkBuffer","uninstallNetworkInterceptor","FloatingPill","BackstagePanel","jsx","_jsx","jsxs","_jsxs","Backstage","visible","appVersion","buildNumber","bundleId","deviceInfo","state","quickActions","featureFlags","onToggleFeatureFlag","maxLogs","logFilters","onCopyLogs","extraTabs","children","styles","propStyles","initialX","initialY","pillText","enableNetworkInspector","maxNetworkEntries","maxNetworkBodySize","networkFilters","autoFilterNetworkLogs","ref","panelVisible","setPanelVisible","hasError","setHasError","logs","setLogs","networkEntries","setNetworkEntries","logBuffer","networkBuffer","openPanel","current","getAll","closePanel","clearLogs","clear","refreshLogs","refreshNetwork","clearNetwork","handleLogEntry","entry","push","level","handleNetworkEntry","upsert","filters","maxBodySize","open","close","displayText","style","container","pointerEvents","text","onPress","onClose","onRefreshLogs","onRefreshNetwork","onClearNetwork","onCopyNetwork","displayName","create","absoluteFillObject","zIndex","elevation"],"sourceRoot":"../../src","sources":["Backstage.tsx"],"mappings":"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","ignoreList":[]}
|