react-native-mcp-kit 2.1.0 → 2.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.
Files changed (92) hide show
  1. package/README.md +20 -11
  2. package/dist/bin/ios-hid +0 -0
  3. package/dist/client/contexts/McpContext/McpProvider.d.ts.map +1 -1
  4. package/dist/client/contexts/McpContext/McpProvider.js +6 -3
  5. package/dist/client/contexts/McpContext/McpProvider.js.map +1 -1
  6. package/dist/modules/alert/alert.d.ts.map +1 -1
  7. package/dist/modules/alert/alert.js +6 -5
  8. package/dist/modules/alert/alert.js.map +1 -1
  9. package/dist/modules/console/console.d.ts.map +1 -1
  10. package/dist/modules/console/console.js +18 -13
  11. package/dist/modules/console/console.js.map +1 -1
  12. package/dist/modules/device/device.d.ts.map +1 -1
  13. package/dist/modules/device/device.js +23 -27
  14. package/dist/modules/device/device.js.map +1 -1
  15. package/dist/modules/errors/errors.d.ts.map +1 -1
  16. package/dist/modules/errors/errors.js +92 -11
  17. package/dist/modules/errors/errors.js.map +1 -1
  18. package/dist/modules/errors/types.d.ts +8 -0
  19. package/dist/modules/errors/types.d.ts.map +1 -1
  20. package/dist/modules/fiberTree/fiberTree.d.ts +4 -0
  21. package/dist/modules/fiberTree/fiberTree.d.ts.map +1 -1
  22. package/dist/modules/fiberTree/fiberTree.js +353 -114
  23. package/dist/modules/fiberTree/fiberTree.js.map +1 -1
  24. package/dist/modules/fiberTree/index.d.ts +1 -0
  25. package/dist/modules/fiberTree/index.d.ts.map +1 -1
  26. package/dist/modules/fiberTree/index.js +14 -1
  27. package/dist/modules/fiberTree/index.js.map +1 -1
  28. package/dist/modules/fiberTree/types.d.ts +40 -0
  29. package/dist/modules/fiberTree/types.d.ts.map +1 -1
  30. package/dist/modules/fiberTree/utils.d.ts +13 -0
  31. package/dist/modules/fiberTree/utils.d.ts.map +1 -1
  32. package/dist/modules/fiberTree/utils.js +195 -23
  33. package/dist/modules/fiberTree/utils.js.map +1 -1
  34. package/dist/modules/i18next/i18next.d.ts.map +1 -1
  35. package/dist/modules/i18next/i18next.js +30 -16
  36. package/dist/modules/i18next/i18next.js.map +1 -1
  37. package/dist/modules/index.d.ts +1 -0
  38. package/dist/modules/index.d.ts.map +1 -1
  39. package/dist/modules/index.js +3 -1
  40. package/dist/modules/index.js.map +1 -1
  41. package/dist/modules/logBox/index.d.ts +2 -0
  42. package/dist/modules/logBox/index.d.ts.map +1 -0
  43. package/dist/modules/logBox/index.js +6 -0
  44. package/dist/modules/logBox/index.js.map +1 -0
  45. package/dist/modules/logBox/logBox.d.ts +3 -0
  46. package/dist/modules/logBox/logBox.d.ts.map +1 -0
  47. package/dist/modules/logBox/logBox.js +234 -0
  48. package/dist/modules/logBox/logBox.js.map +1 -0
  49. package/dist/modules/navigation/navigation.d.ts.map +1 -1
  50. package/dist/modules/navigation/navigation.js +130 -42
  51. package/dist/modules/navigation/navigation.js.map +1 -1
  52. package/dist/modules/network/network.d.ts.map +1 -1
  53. package/dist/modules/network/network.js +262 -67
  54. package/dist/modules/network/network.js.map +1 -1
  55. package/dist/modules/network/types.d.ts +35 -3
  56. package/dist/modules/network/types.d.ts.map +1 -1
  57. package/dist/modules/reactQuery/reactQuery.d.ts.map +1 -1
  58. package/dist/modules/reactQuery/reactQuery.js +25 -15
  59. package/dist/modules/reactQuery/reactQuery.js.map +1 -1
  60. package/dist/modules/storage/storage.d.ts.map +1 -1
  61. package/dist/modules/storage/storage.js +23 -16
  62. package/dist/modules/storage/storage.js.map +1 -1
  63. package/dist/server/host/hostModule.d.ts.map +1 -1
  64. package/dist/server/host/hostModule.js +19 -1
  65. package/dist/server/host/hostModule.js.map +1 -1
  66. package/dist/server/host/tools/capture.d.ts.map +1 -1
  67. package/dist/server/host/tools/capture.js +111 -28
  68. package/dist/server/host/tools/capture.js.map +1 -1
  69. package/dist/server/host/tools/devices.js +1 -1
  70. package/dist/server/host/tools/devices.js.map +1 -1
  71. package/dist/server/host/tools/input.d.ts +3 -0
  72. package/dist/server/host/tools/input.d.ts.map +1 -1
  73. package/dist/server/host/tools/input.js +197 -5
  74. package/dist/server/host/tools/input.js.map +1 -1
  75. package/dist/server/host/tools/lifecycle.d.ts.map +1 -1
  76. package/dist/server/host/tools/lifecycle.js +5 -4
  77. package/dist/server/host/tools/lifecycle.js.map +1 -1
  78. package/dist/server/host/tools/symbolicate.d.ts +3 -0
  79. package/dist/server/host/tools/symbolicate.d.ts.map +1 -0
  80. package/dist/server/host/tools/symbolicate.js +199 -0
  81. package/dist/server/host/tools/symbolicate.js.map +1 -0
  82. package/dist/server/host/tools/tapFiber.d.ts +3 -0
  83. package/dist/server/host/tools/tapFiber.d.ts.map +1 -0
  84. package/dist/server/host/tools/tapFiber.js +89 -0
  85. package/dist/server/host/tools/tapFiber.js.map +1 -0
  86. package/dist/server/host/types.d.ts +14 -0
  87. package/dist/server/host/types.d.ts.map +1 -1
  88. package/dist/server/mcpServer.d.ts +6 -0
  89. package/dist/server/mcpServer.d.ts.map +1 -1
  90. package/dist/server/mcpServer.js +440 -93
  91. package/dist/server/mcpServer.js.map +1 -1
  92. package/package.json +1 -1
@@ -2,12 +2,31 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.networkModule = void 0;
4
4
  const DEFAULT_MAX_ENTRIES = 100;
5
+ const DEFAULT_BODY_MAX_BYTES = 20_000;
6
+ const DEFAULT_BODY_PREVIEW = 200;
5
7
  const DEFAULT_IGNORE_URLS = [/^ws:/, /^wss:/, /localhost:8081/, /symbolicate/];
8
+ const DEFAULT_REDACT_HEADERS = [
9
+ 'authorization',
10
+ 'cookie',
11
+ 'set-cookie',
12
+ 'x-api-key',
13
+ 'x-auth-token',
14
+ 'x-access-token',
15
+ ];
16
+ const DEFAULT_REDACT_BODY_KEYS = [
17
+ 'accessToken',
18
+ 'apiKey',
19
+ 'otp',
20
+ 'password',
21
+ 'pin',
22
+ 'refreshToken',
23
+ 'secret',
24
+ 'token',
25
+ ];
6
26
  const shouldIgnore = (url, patterns) => {
7
27
  return patterns.some((pattern) => {
8
- if (typeof pattern === 'string') {
28
+ if (typeof pattern === 'string')
9
29
  return url.includes(pattern);
10
- }
11
30
  return pattern.test(url);
12
31
  });
13
32
  };
@@ -23,29 +42,121 @@ const parseHeaders = (headers) => {
23
42
  }
24
43
  return headers;
25
44
  };
26
- const tryParseBody = (body) => {
27
- if (body === null || body === undefined)
45
+ const redactHeadersMap = (headers, redact) => {
46
+ if (!redact || redact.size === 0)
47
+ return headers;
48
+ const out = {};
49
+ for (const [key, value] of Object.entries(headers)) {
50
+ out[key] = redact.has(key.toLowerCase()) ? '[redacted]' : value;
51
+ }
52
+ return out;
53
+ };
54
+ // Walk an object graph replacing values for any key (case-insensitive) in
55
+ // `redact`. Preserves shape so the agent still sees the field exists.
56
+ const redactBodyValue = (value, redact) => {
57
+ if (!redact || redact.size === 0)
58
+ return value;
59
+ if (value === null || typeof value !== 'object')
60
+ return value;
61
+ if (Array.isArray(value)) {
62
+ return value.map((item) => {
63
+ return redactBodyValue(item, redact);
64
+ });
65
+ }
66
+ const out = {};
67
+ for (const [key, v] of Object.entries(value)) {
68
+ out[key] = redact.has(key.toLowerCase()) ? '[redacted]' : redactBodyValue(v, redact);
69
+ }
70
+ return out;
71
+ };
72
+ const tryParseJson = (text) => {
73
+ try {
74
+ return JSON.parse(text);
75
+ }
76
+ catch {
77
+ return text;
78
+ }
79
+ };
80
+ const byteLengthOf = (value) => {
81
+ if (typeof value === 'string')
82
+ return value.length;
83
+ try {
84
+ return JSON.stringify(value)?.length ?? 0;
85
+ }
86
+ catch {
87
+ return 0;
88
+ }
89
+ };
90
+ // Capture a request/response body under `bodyMaxBytes`. Returns undefined when
91
+ // the payload should not be captured at all (disabled, null, binary).
92
+ const captureBody = (raw, bodyMaxBytes, redactKeys) => {
93
+ if (raw === null || raw === undefined)
28
94
  return undefined;
29
- if (typeof body === 'string') {
30
- try {
31
- return JSON.parse(body);
32
- }
33
- catch {
34
- return body;
35
- }
95
+ if (bodyMaxBytes <= 0)
96
+ return undefined;
97
+ let parsed = raw;
98
+ if (typeof raw === 'string') {
99
+ parsed = tryParseJson(raw);
100
+ }
101
+ const redacted = redactBodyValue(parsed, redactKeys);
102
+ const bytes = byteLengthOf(redacted);
103
+ if (bytes > bodyMaxBytes) {
104
+ const preview = typeof redacted === 'string'
105
+ ? redacted.slice(0, DEFAULT_BODY_PREVIEW)
106
+ : JSON.stringify(redacted).slice(0, DEFAULT_BODY_PREVIEW);
107
+ return { bytes, preview, truncated: true };
36
108
  }
37
- return body;
109
+ return { bytes, data: redacted };
110
+ };
111
+ const toRedactSet = (list, defaults) => {
112
+ if (list === false)
113
+ return null;
114
+ const src = list === undefined ? defaults : list;
115
+ return new Set(src.map((s) => {
116
+ return s.toLowerCase();
117
+ }));
118
+ };
119
+ /**
120
+ * Strip full-body `data` from an entry, keeping just size + preview. Agents
121
+ * get a lean overview from get_requests/get_errors by default and can reach
122
+ * for `get_body` when they need the payload.
123
+ */
124
+ const withoutBody = (entry) => {
125
+ const req = entry.request.body ? { ...entry.request.body, data: undefined } : undefined;
126
+ const res = entry.response?.body ? { ...entry.response.body, data: undefined } : undefined;
127
+ return {
128
+ ...entry,
129
+ request: { ...entry.request, body: req },
130
+ response: entry.response
131
+ ? {
132
+ ...entry.response,
133
+ body: res,
134
+ }
135
+ : null,
136
+ };
137
+ };
138
+ const percentile = (sorted, p) => {
139
+ if (sorted.length === 0)
140
+ return null;
141
+ const idx = Math.min(sorted.length - 1, Math.floor((p / 100) * sorted.length));
142
+ return sorted[idx];
38
143
  };
39
144
  const networkModule = (options) => {
40
145
  const maxEntries = options?.maxEntries ?? DEFAULT_MAX_ENTRIES;
41
146
  const includeBodies = options?.includeBodies ?? true;
147
+ const bodyMaxBytes = includeBodies ? (options?.bodyMaxBytes ?? DEFAULT_BODY_MAX_BYTES) : 0;
42
148
  const ignoreUrls = [...DEFAULT_IGNORE_URLS, ...(options?.ignoreUrls ?? [])];
149
+ const redactHeaderSet = toRedactSet(options?.redactHeaders, DEFAULT_REDACT_HEADERS);
150
+ const redactBodyKeySet = toRedactSet(options?.redactBodyKeys, DEFAULT_REDACT_BODY_KEYS);
43
151
  const buffer = [];
44
- const addEntry = (entry) => {
152
+ let nextId = 1;
153
+ const addEntry = (base) => {
154
+ const entry = { ...base, id: nextId++ };
45
155
  buffer.push(entry);
46
156
  if (buffer.length > maxEntries) {
47
157
  buffer.splice(0, buffer.length - maxEntries);
48
158
  }
159
+ return entry;
49
160
  };
50
161
  // Intercept global fetch
51
162
  const originalFetch = global.fetch;
@@ -56,43 +167,37 @@ const networkModule = (options) => {
56
167
  if (shouldIgnore(url, ignoreUrls)) {
57
168
  return originalFetch(input, init);
58
169
  }
59
- const entry = {
170
+ const entry = addEntry({
60
171
  duration: null,
61
172
  method: method.toUpperCase(),
62
173
  request: {
63
- body: includeBodies ? tryParseBody(init?.body) : undefined,
64
- headers: parseHeaders(init?.headers),
174
+ body: captureBody(init?.body, bodyMaxBytes, redactBodyKeySet),
175
+ headers: redactHeadersMap(parseHeaders(init?.headers), redactHeaderSet),
65
176
  },
66
177
  response: null,
67
178
  startedAt: new Date().toISOString(),
68
179
  status: 'pending',
69
180
  url,
70
- };
71
- addEntry(entry);
181
+ });
72
182
  const startTime = Date.now();
73
183
  try {
74
184
  const response = await originalFetch(input, init);
75
185
  entry.duration = Date.now() - startTime;
76
186
  entry.status = 'success';
77
187
  let responseBody;
78
- if (includeBodies) {
188
+ if (bodyMaxBytes > 0) {
79
189
  try {
80
190
  const cloned = response.clone();
81
- responseBody = await cloned.json();
191
+ const text = await cloned.text();
192
+ responseBody = captureBody(text, bodyMaxBytes, redactBodyKeySet);
82
193
  }
83
194
  catch {
84
- try {
85
- const cloned = response.clone();
86
- responseBody = await cloned.text();
87
- }
88
- catch {
89
- responseBody = undefined;
90
- }
195
+ responseBody = undefined;
91
196
  }
92
197
  }
93
198
  entry.response = {
94
199
  body: responseBody,
95
- headers: parseHeaders(response.headers),
200
+ headers: redactHeadersMap(parseHeaders(response.headers), redactHeaderSet),
96
201
  status: response.status,
97
202
  };
98
203
  return response;
@@ -101,7 +206,7 @@ const networkModule = (options) => {
101
206
  entry.duration = Date.now() - startTime;
102
207
  entry.status = 'error';
103
208
  entry.response = {
104
- body: error instanceof Error ? error.message : String(error),
209
+ body: { bytes: 0, data: error instanceof Error ? error.message : String(error) },
105
210
  headers: {},
106
211
  status: 0,
107
212
  };
@@ -123,9 +228,8 @@ const networkModule = (options) => {
123
228
  };
124
229
  XHR.prototype.setRequestHeader = function (name, value) {
125
230
  const headers = this.__mcp_headers;
126
- if (headers) {
231
+ if (headers)
127
232
  headers[name] = value;
128
- }
129
233
  return originalSetRequestHeader.call(this, name, value);
130
234
  };
131
235
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -136,107 +240,171 @@ const networkModule = (options) => {
136
240
  if (!url || shouldIgnore(url, ignoreUrls)) {
137
241
  return originalSend.call(this, body);
138
242
  }
139
- const entry = {
243
+ const entry = addEntry({
140
244
  duration: null,
141
245
  method: (method ?? 'GET').toUpperCase(),
142
246
  request: {
143
- body: includeBodies ? tryParseBody(body) : undefined,
144
- headers: headers ?? {},
247
+ body: captureBody(body, bodyMaxBytes, redactBodyKeySet),
248
+ headers: redactHeadersMap(headers ?? {}, redactHeaderSet),
145
249
  },
146
250
  response: null,
147
251
  startedAt: new Date().toISOString(),
148
252
  status: 'pending',
149
253
  url,
150
- };
151
- addEntry(entry);
254
+ });
152
255
  const startTime = Date.now();
153
256
  this.addEventListener('loadend', () => {
154
257
  entry.duration = Date.now() - startTime;
155
258
  entry.status = this.status >= 200 && this.status < 400 ? 'success' : 'error';
156
259
  let responseBody;
157
- if (includeBodies) {
260
+ if (bodyMaxBytes > 0) {
158
261
  const responseType = this.responseType;
159
262
  if (responseType === '' || responseType === 'text') {
160
263
  try {
161
- responseBody = tryParseBody(this.responseText);
264
+ responseBody = captureBody(this.responseText, bodyMaxBytes, redactBodyKeySet);
162
265
  }
163
266
  catch {
164
267
  responseBody = undefined;
165
268
  }
166
269
  }
167
270
  else if (responseType === 'json') {
168
- responseBody = this.response;
271
+ responseBody = captureBody(this.response, bodyMaxBytes, redactBodyKeySet);
169
272
  }
170
273
  else {
171
- // blob | arraybuffer | document — don't serialize binary/DOM payloads
172
- responseBody = `[${responseType}]`;
274
+ // blob | arraybuffer | document — don't serialize binary / DOM payloads
275
+ responseBody = { bytes: 0, preview: `[${responseType}]` };
173
276
  }
174
277
  }
175
278
  entry.response = {
176
279
  body: responseBody,
177
- headers: parseHeaders(this.getAllResponseHeaders?.()
280
+ headers: redactHeadersMap(parseHeaders(this.getAllResponseHeaders?.()
178
281
  ?.split('\r\n')
179
282
  .filter(Boolean)
180
283
  .reduce((acc, line) => {
181
284
  const [key, ...rest] = line.split(': ');
182
- if (key) {
285
+ if (key)
183
286
  acc[key] = rest.join(': ');
184
- }
185
287
  return acc;
186
- }, {})),
288
+ }, {})), redactHeaderSet),
187
289
  status: this.status,
188
290
  };
189
291
  });
190
292
  return originalSend.call(this, body);
191
293
  };
294
+ // Tool response shaping — strip full body unless explicitly requested.
295
+ const project = (entries, full) => {
296
+ if (full)
297
+ return entries;
298
+ return entries.map(withoutBody);
299
+ };
300
+ const findById = (id) => {
301
+ return buffer.find((e) => {
302
+ return e.id === id;
303
+ });
304
+ };
192
305
  return {
193
- description: 'Intercepted HTTP requests (fetch/XHR): view request/response bodies, headers, status, duration.',
306
+ description: `Intercepted fetch + XMLHttpRequest method, URL, status, duration, headers, bodies.
307
+
308
+ CAPTURE
309
+ Each entry carries a numeric \`id\`. Bodies are stored up to bodyMaxBytes
310
+ (default 20KB); larger payloads keep only a preview + truncated marker.
311
+ Sensitive headers (Authorization, Cookie, Set-Cookie, X-Api-Key, X-Auth-*)
312
+ and body keys (password, token, accessToken, refreshToken, apiKey, secret,
313
+ otp, pin) are redacted at capture time.
314
+
315
+ QUERY
316
+ get_requests / get_errors / get_request drop full \`data\` from each body
317
+ by default — pass includeBodies: true to get them inline. Use get_body to
318
+ fetch one specific body without polluting the response with the rest.
319
+
320
+ WebSocket / Metro / symbolicate traffic is auto-ignored. Buffer size, body
321
+ cap, and redaction lists are configurable via networkModule options.`,
194
322
  name: 'network',
195
323
  tools: {
196
324
  clear_requests: {
197
- description: 'Clear all captured network requests from the buffer',
325
+ description: 'Clear the request buffer.',
198
326
  handler: () => {
199
327
  buffer.length = 0;
200
328
  return { success: true };
201
329
  },
202
330
  },
331
+ get_body: {
332
+ description: 'Fetch one captured request or response body by entry id (from get_requests). Returns { id, kind, body } or { error }. body.data is the parsed payload when the original size was below bodyMaxBytes; otherwise only preview + truncated are set.',
333
+ handler: (args) => {
334
+ const id = args.id;
335
+ const kind = args.kind ?? 'response';
336
+ if (typeof id !== 'number')
337
+ return { error: 'id required (number).' };
338
+ const entry = findById(id);
339
+ if (!entry)
340
+ return { error: `No entry with id ${id} (buffer has ${buffer.length}).` };
341
+ if (kind !== 'request' && kind !== 'response') {
342
+ return { error: `kind must be "request" or "response", got ${kind}.` };
343
+ }
344
+ const body = kind === 'request' ? entry.request.body : entry.response?.body;
345
+ return { body: body ?? null, id, kind };
346
+ },
347
+ inputSchema: {
348
+ id: { description: 'Entry id from get_requests.', type: 'number' },
349
+ kind: {
350
+ description: 'Which body to return: "request" or "response". Default "response".',
351
+ examples: ['request', 'response'],
352
+ type: 'string',
353
+ },
354
+ },
355
+ },
203
356
  get_errors: {
204
- description: 'Get only failed network requests (non-2xx status or network errors)',
357
+ description: 'Failed requests only (non-2xx or network errors). Bodies stripped by default; pass includeBodies: true to keep them.',
205
358
  handler: (args) => {
206
359
  let result = buffer.filter((e) => {
207
360
  return e.status === 'error';
208
361
  });
209
- if (args.limit) {
362
+ if (args.limit)
210
363
  result = result.slice(-args.limit);
211
- }
212
- return result;
364
+ return project(result, args.includeBodies === true);
213
365
  },
214
366
  inputSchema: {
215
- limit: { description: 'Max number of entries to return', type: 'number' },
367
+ includeBodies: {
368
+ description: 'Include full body data in each entry. Default false.',
369
+ type: 'boolean',
370
+ },
371
+ limit: { description: 'Max entries to return.', type: 'number' },
216
372
  },
217
373
  },
218
374
  get_pending: {
219
- description: 'Get currently pending (in-flight) network requests',
220
- handler: () => {
221
- return buffer.filter((e) => {
375
+ description: 'In-flight requests (bodies stripped by default).',
376
+ handler: (args) => {
377
+ const result = buffer.filter((e) => {
222
378
  return e.status === 'pending';
223
379
  });
380
+ return project(result, args.includeBodies === true);
381
+ },
382
+ inputSchema: {
383
+ includeBodies: {
384
+ description: 'Include full body data. Default false.',
385
+ type: 'boolean',
386
+ },
224
387
  },
225
388
  },
226
389
  get_request: {
227
- description: 'Get a specific network request by URL substring match',
390
+ description: 'Requests whose URL contains the given substring. Bodies stripped by default.',
228
391
  handler: (args) => {
229
392
  const urlFilter = args.url;
230
- return buffer.filter((e) => {
393
+ const result = buffer.filter((e) => {
231
394
  return e.url.includes(urlFilter);
232
395
  });
396
+ return project(result, args.includeBodies === true);
233
397
  },
234
398
  inputSchema: {
235
- url: { description: 'URL substring to match', type: 'string' },
399
+ includeBodies: {
400
+ description: 'Include full body data. Default false.',
401
+ type: 'boolean',
402
+ },
403
+ url: { description: 'URL substring.', type: 'string' },
236
404
  },
237
405
  },
238
406
  get_requests: {
239
- description: 'Get all captured network requests. Optionally filter by method, status, or URL pattern.',
407
+ description: 'All captured requests; filterable by method / status / URL substring. Bodies stripped by default.',
240
408
  handler: (args) => {
241
409
  let result = [...buffer];
242
410
  if (args.method) {
@@ -256,30 +424,57 @@ const networkModule = (options) => {
256
424
  return e.url.includes(urlFilter);
257
425
  });
258
426
  }
259
- if (args.limit) {
427
+ if (args.limit)
260
428
  result = result.slice(-args.limit);
261
- }
262
- return result;
429
+ return project(result, args.includeBodies === true);
263
430
  },
264
431
  inputSchema: {
265
- limit: { description: 'Max number of entries to return', type: 'number' },
266
- method: { description: 'Filter by HTTP method (GET, POST, etc.)', type: 'string' },
267
- status: { description: 'Filter by status (pending, success, error)', type: 'string' },
268
- url: { description: 'Filter by URL substring', type: 'string' },
432
+ includeBodies: {
433
+ description: 'Include full body data in each entry. Default false.',
434
+ type: 'boolean',
435
+ },
436
+ limit: { description: 'Max entries to return.', type: 'number' },
437
+ method: {
438
+ description: 'HTTP method filter.',
439
+ examples: ['GET', 'POST', 'PUT', 'DELETE'],
440
+ type: 'string',
441
+ },
442
+ status: {
443
+ description: 'Status filter.',
444
+ examples: ['pending', 'success', 'error'],
445
+ type: 'string',
446
+ },
447
+ url: { description: 'URL substring filter.', type: 'string' },
269
448
  },
270
449
  },
271
450
  get_stats: {
272
- description: 'Get network request statistics (total, by status, by method)',
451
+ description: 'Counts total, by status, by method — plus duration percentiles (min / p50 / p95 / max) and total bytes stored.',
273
452
  handler: () => {
274
453
  const byMethod = {};
275
454
  const byStatus = { error: 0, pending: 0, success: 0 };
455
+ let bytes = 0;
456
+ const durations = [];
276
457
  for (const entry of buffer) {
277
458
  byMethod[entry.method] = (byMethod[entry.method] ?? 0) + 1;
278
459
  byStatus[entry.status] = (byStatus[entry.status] ?? 0) + 1;
460
+ if (typeof entry.duration === 'number')
461
+ durations.push(entry.duration);
462
+ bytes += entry.request.body?.bytes ?? 0;
463
+ bytes += entry.response?.body?.bytes ?? 0;
279
464
  }
465
+ durations.sort((a, b) => {
466
+ return a - b;
467
+ });
280
468
  return {
281
469
  byMethod,
282
470
  byStatus,
471
+ bytes,
472
+ durationMs: {
473
+ max: durations.length ? durations[durations.length - 1] : null,
474
+ min: durations.length ? durations[0] : null,
475
+ p50: percentile(durations, 50),
476
+ p95: percentile(durations, 95),
477
+ },
283
478
  total: buffer.length,
284
479
  };
285
480
  },
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/modules/network/network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../src/modules/network/network.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,58 @@
1
1
  export type HttpMethod = 'DELETE' | 'GET' | 'HEAD' | 'OPTIONS' | 'PATCH' | 'POST' | 'PUT';
2
+ /**
3
+ * Body captured on request or response. For tiny / moderate payloads we keep
4
+ * the fully-parsed `data` inline. Bodies larger than `bodyMaxBytes` get their
5
+ * `data` dropped and a `preview` plus `truncated: true` marker is kept instead,
6
+ * so memory stays bounded even under pagination / feed responses.
7
+ */
8
+ export interface CapturedBody {
9
+ bytes: number;
10
+ data?: unknown;
11
+ preview?: string;
12
+ truncated?: true;
13
+ }
2
14
  export interface NetworkEntry {
3
15
  duration: number | null;
16
+ id: number;
4
17
  method: string;
5
18
  request: {
6
19
  headers: Record<string, string>;
7
- body?: unknown;
20
+ body?: CapturedBody;
8
21
  };
9
22
  response: {
10
23
  headers: Record<string, string>;
11
24
  status: number;
12
- body?: unknown;
25
+ body?: CapturedBody;
13
26
  } | null;
14
27
  startedAt: string;
15
28
  status: 'error' | 'pending' | 'success';
16
29
  url: string;
17
30
  }
18
31
  export interface NetworkModuleOptions {
32
+ /**
33
+ * Cap on stored body size (bytes). Bodies above this keep only a preview +
34
+ * byte count. Default 20_000 (20KB) — protects against megabyte feeds.
35
+ * Pass 0 to disable capture entirely.
36
+ */
37
+ bodyMaxBytes?: number;
19
38
  /** Ignore URLs matching these patterns (e.g. WebSocket, Metro bundler) */
20
39
  ignoreUrls?: Array<string | RegExp>;
21
- /** Include request/response bodies (default: true) */
40
+ /** Include request/response bodies at capture time (default: true) */
22
41
  includeBodies?: boolean;
23
42
  /** Max entries in the buffer (default: 100) */
24
43
  maxEntries?: number;
44
+ /**
45
+ * Body keys (case-insensitive) to redact before storing. Recursively matches
46
+ * nested objects. Default: ['password','token','accessToken','refreshToken',
47
+ * 'apiKey','secret','otp','pin']. Pass false to disable, [] to keep defaults
48
+ * only when explicitly empty.
49
+ */
50
+ redactBodyKeys?: string[] | false;
51
+ /**
52
+ * Header names (case-insensitive) to replace with "[redacted]" before
53
+ * storing. Default: ['authorization','cookie','set-cookie','x-api-key',
54
+ * 'x-auth-token','x-access-token']. Pass false to disable.
55
+ */
56
+ redactHeaders?: string[] | false;
25
57
  }
26
58
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/network/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1F,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/network/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1F;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IACpC,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAClC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;CAClC"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactQuery.d.ts","sourceRoot":"","sources":["../../../src/modules/reactQuery/reactQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AA2B/C,eAAO,MAAM,gBAAgB,gBAAiB,eAAe,KAAG,SAmJ/D,CAAC"}
1
+ {"version":3,"file":"reactQuery.d.ts","sourceRoot":"","sources":["../../../src/modules/reactQuery/reactQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AA2B/C,eAAO,MAAM,gBAAgB,gBAAiB,eAAe,KAAG,SAuJ/D,CAAC"}