@rozenite/network-activity-plugin 1.7.0 → 1.8.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +24 -0
  3. package/dist/devtools/App.html +2 -2
  4. package/dist/devtools/assets/{App-pokLiGYV.js → App-B3xlUjs6.js} +163 -115
  5. package/dist/devtools/assets/{App-BrSkOkws.css → App-m6xge0az.css} +13 -0
  6. package/dist/react-native/chunks/boot-recording.cjs +307 -28
  7. package/dist/react-native/chunks/boot-recording.js +310 -31
  8. package/dist/react-native/chunks/useNetworkActivityDevTools.require.cjs +192 -141
  9. package/dist/react-native/chunks/useNetworkActivityDevTools.require.js +193 -142
  10. package/dist/react-native/index.d.ts +24 -7
  11. package/dist/rozenite.json +1 -1
  12. package/dist/sdk/index.cjs +127 -0
  13. package/dist/sdk/index.d.ts +1243 -0
  14. package/dist/sdk/index.js +127 -0
  15. package/package.json +17 -6
  16. package/sdk.ts +59 -0
  17. package/src/react-native/__tests__/events-listener.test.ts +35 -0
  18. package/src/react-native/agent/__tests__/network-activity-agent-state.test.ts +21 -9
  19. package/src/react-native/agent/state.ts +13 -13
  20. package/src/react-native/agent/tools.ts +20 -146
  21. package/src/react-native/agent/use-network-activity-agent-tools.ts +73 -64
  22. package/src/react-native/events-listener.ts +12 -3
  23. package/src/react-native/http/http-inspector.ts +19 -5
  24. package/src/react-native/network-inspector.ts +46 -8
  25. package/src/react-native/nitro-fetch/__tests__/nitro-network-inspector.test.ts +198 -0
  26. package/src/react-native/nitro-fetch/nitro-network-inspector.ts +403 -0
  27. package/src/react-native/useHttpInspector.ts +9 -19
  28. package/src/react-native/useNetworkActivityDevTools.ts +13 -1
  29. package/src/react-native/websocket/__tests__/websocket-inspector.test.ts +69 -0
  30. package/src/react-native/websocket/websocket-inspector.ts +32 -17
  31. package/src/shared/agent-tools.ts +230 -0
  32. package/src/shared/client.ts +3 -0
  33. package/src/shared/http-events.ts +6 -0
  34. package/src/shared/websocket-events.ts +16 -7
  35. package/src/ui/components/RequestList.tsx +21 -0
  36. package/src/ui/components/SidePanel.tsx +12 -9
  37. package/src/ui/state/derived.ts +4 -0
  38. package/src/ui/state/model.ts +6 -1
  39. package/src/ui/state/store.ts +52 -36
  40. package/src/ui/tabs/HeadersTab.tsx +18 -4
  41. package/src/ui/tabs/ResponseTab.tsx +5 -3
  42. package/tsconfig.json +4 -1
  43. package/vite.config.ts +7 -0
@@ -0,0 +1,1243 @@
1
+ import { AgentToolContract } from '@rozenite/agent-shared';
2
+ import { AgentToolDescriptor } from '@rozenite/agent-shared';
3
+
4
+ export declare type Cookie = {
5
+ name: string;
6
+ value: string;
7
+ domain?: string;
8
+ path?: string;
9
+ expires?: string;
10
+ maxAge?: string;
11
+ secure?: boolean;
12
+ httpOnly?: boolean;
13
+ sameSite?: string;
14
+ };
15
+
16
+ declare const createNetworkActivityAgentState: () => {
17
+ startRecording(metadata?: Partial<RecordingMetadata>): {
18
+ recording: {
19
+ isRecording: boolean;
20
+ startedAt: number | null;
21
+ stoppedAt: number | null;
22
+ httpRequestCount: number;
23
+ realtimeConnectionCount: number;
24
+ http: {
25
+ totalRecorded: number;
26
+ evictedCount: number;
27
+ truncated: boolean;
28
+ capacity: number;
29
+ };
30
+ realtime: {
31
+ totalRecorded: number;
32
+ evictedCount: number;
33
+ truncated: boolean;
34
+ capacity: number;
35
+ };
36
+ generation: number;
37
+ enabledInspectors: {
38
+ http: boolean;
39
+ websocket: boolean;
40
+ sse: boolean;
41
+ };
42
+ };
43
+ };
44
+ stopRecording(): {
45
+ recording: {
46
+ isRecording: boolean;
47
+ startedAt: number | null;
48
+ stoppedAt: number | null;
49
+ httpRequestCount: number;
50
+ realtimeConnectionCount: number;
51
+ http: {
52
+ totalRecorded: number;
53
+ evictedCount: number;
54
+ truncated: boolean;
55
+ capacity: number;
56
+ };
57
+ realtime: {
58
+ totalRecorded: number;
59
+ evictedCount: number;
60
+ truncated: boolean;
61
+ capacity: number;
62
+ };
63
+ generation: number;
64
+ enabledInspectors: {
65
+ http: boolean;
66
+ websocket: boolean;
67
+ sse: boolean;
68
+ };
69
+ };
70
+ };
71
+ getStatus: () => {
72
+ recording: {
73
+ isRecording: boolean;
74
+ startedAt: number | null;
75
+ stoppedAt: number | null;
76
+ httpRequestCount: number;
77
+ realtimeConnectionCount: number;
78
+ http: {
79
+ totalRecorded: number;
80
+ evictedCount: number;
81
+ truncated: boolean;
82
+ capacity: number;
83
+ };
84
+ realtime: {
85
+ totalRecorded: number;
86
+ evictedCount: number;
87
+ truncated: boolean;
88
+ capacity: number;
89
+ };
90
+ generation: number;
91
+ enabledInspectors: {
92
+ http: boolean;
93
+ websocket: boolean;
94
+ sse: boolean;
95
+ };
96
+ };
97
+ };
98
+ getHttpRecord(requestId: string): HttpAgentRecord | null;
99
+ getRealtimeRecord(requestId: string): RealtimeAgentRecord | null;
100
+ listRequests(input: {
101
+ limit?: number;
102
+ cursor?: string;
103
+ }): {
104
+ items: {
105
+ requestId: string;
106
+ method: HttpMethod;
107
+ url: string;
108
+ status: number | null;
109
+ type: ResourceType;
110
+ startTimeMs: number;
111
+ endTimeMs: number | null;
112
+ durationMs: number | null;
113
+ transferSize: number | null;
114
+ encodedDataLength: number | null;
115
+ outcome: string;
116
+ }[];
117
+ page: {
118
+ limit: number;
119
+ hasMore: boolean;
120
+ nextCursor?: string;
121
+ };
122
+ recording: {
123
+ isRecording: boolean;
124
+ startedAt: number | null;
125
+ stoppedAt: number | null;
126
+ httpRequestCount: number;
127
+ realtimeConnectionCount: number;
128
+ http: {
129
+ totalRecorded: number;
130
+ evictedCount: number;
131
+ truncated: boolean;
132
+ capacity: number;
133
+ };
134
+ realtime: {
135
+ totalRecorded: number;
136
+ evictedCount: number;
137
+ truncated: boolean;
138
+ capacity: number;
139
+ };
140
+ generation: number;
141
+ enabledInspectors: {
142
+ http: boolean;
143
+ websocket: boolean;
144
+ sse: boolean;
145
+ };
146
+ };
147
+ };
148
+ listRealtimeConnections(input: {
149
+ limit?: number;
150
+ cursor?: string;
151
+ }): {
152
+ items: ({
153
+ requestId: string;
154
+ kind: "websocket";
155
+ url: string;
156
+ status: "connecting" | "open" | "closing" | "closed" | "error";
157
+ startedAt: number;
158
+ endedAt: number | null;
159
+ durationMs: number | null;
160
+ messageCount: number;
161
+ error: string | null;
162
+ closeCode: number | null;
163
+ httpStatus?: undefined;
164
+ } | {
165
+ requestId: string;
166
+ kind: "sse";
167
+ url: string | null;
168
+ status: "connecting" | "open" | "closed" | "error";
169
+ startedAt: number;
170
+ endedAt: number | null;
171
+ durationMs: number | null;
172
+ messageCount: number;
173
+ error: string | null;
174
+ httpStatus: number | null;
175
+ closeCode?: undefined;
176
+ })[];
177
+ page: {
178
+ limit: number;
179
+ hasMore: boolean;
180
+ nextCursor?: string;
181
+ };
182
+ recording: {
183
+ isRecording: boolean;
184
+ startedAt: number | null;
185
+ stoppedAt: number | null;
186
+ httpRequestCount: number;
187
+ realtimeConnectionCount: number;
188
+ http: {
189
+ totalRecorded: number;
190
+ evictedCount: number;
191
+ truncated: boolean;
192
+ capacity: number;
193
+ };
194
+ realtime: {
195
+ totalRecorded: number;
196
+ evictedCount: number;
197
+ truncated: boolean;
198
+ capacity: number;
199
+ };
200
+ generation: number;
201
+ enabledInspectors: {
202
+ http: boolean;
203
+ websocket: boolean;
204
+ sse: boolean;
205
+ };
206
+ };
207
+ };
208
+ getRequestDetails(requestId: string): {
209
+ request: {
210
+ requestId: string;
211
+ method: HttpMethod;
212
+ url: string;
213
+ type: ResourceType;
214
+ initiator: Initiator;
215
+ startTimeMs: number;
216
+ endTimeMs: number | null;
217
+ durationMs: number | null;
218
+ request: Request_2;
219
+ response: Response_2 | null;
220
+ loadingFinished: boolean;
221
+ loadingFailed: boolean;
222
+ failureText: string | null;
223
+ canceled: boolean;
224
+ progress: {
225
+ loaded: number;
226
+ total: number;
227
+ lengthComputable: boolean;
228
+ } | null;
229
+ ttfb: number | null;
230
+ size: number | null;
231
+ };
232
+ recording: {
233
+ isRecording: boolean;
234
+ startedAt: number | null;
235
+ stoppedAt: number | null;
236
+ httpRequestCount: number;
237
+ realtimeConnectionCount: number;
238
+ http: {
239
+ totalRecorded: number;
240
+ evictedCount: number;
241
+ truncated: boolean;
242
+ capacity: number;
243
+ };
244
+ realtime: {
245
+ totalRecorded: number;
246
+ evictedCount: number;
247
+ truncated: boolean;
248
+ capacity: number;
249
+ };
250
+ generation: number;
251
+ enabledInspectors: {
252
+ http: boolean;
253
+ websocket: boolean;
254
+ sse: boolean;
255
+ };
256
+ };
257
+ };
258
+ getRealtimeConnectionDetails(requestId: string): {
259
+ connection: {
260
+ requestId: string;
261
+ kind: "websocket";
262
+ url: string;
263
+ socketId: string;
264
+ status: "connecting" | "open" | "closing" | "closed" | "error";
265
+ startedAt: number;
266
+ endedAt: number | null;
267
+ durationMs: number | null;
268
+ protocols: string[] | null;
269
+ options: string[];
270
+ error: string | null;
271
+ closeCode: number | null;
272
+ closeReason: string | null;
273
+ messages: WebSocketAgentMessage[];
274
+ request?: undefined;
275
+ response?: undefined;
276
+ initiator?: undefined;
277
+ resourceType?: undefined;
278
+ } | {
279
+ requestId: string;
280
+ kind: "sse";
281
+ status: "connecting" | "open" | "closed" | "error";
282
+ startedAt: number;
283
+ endedAt: number | null;
284
+ durationMs: number | null;
285
+ request: Request_2 | null;
286
+ response: Response_2 | null;
287
+ initiator: Initiator | null;
288
+ resourceType: ResourceType | null;
289
+ error: string | null;
290
+ messages: SSEAgentMessage[];
291
+ url?: undefined;
292
+ socketId?: undefined;
293
+ protocols?: undefined;
294
+ options?: undefined;
295
+ closeCode?: undefined;
296
+ closeReason?: undefined;
297
+ };
298
+ recording: {
299
+ isRecording: boolean;
300
+ startedAt: number | null;
301
+ stoppedAt: number | null;
302
+ httpRequestCount: number;
303
+ realtimeConnectionCount: number;
304
+ http: {
305
+ totalRecorded: number;
306
+ evictedCount: number;
307
+ truncated: boolean;
308
+ capacity: number;
309
+ };
310
+ realtime: {
311
+ totalRecorded: number;
312
+ evictedCount: number;
313
+ truncated: boolean;
314
+ capacity: number;
315
+ };
316
+ generation: number;
317
+ enabledInspectors: {
318
+ http: boolean;
319
+ websocket: boolean;
320
+ sse: boolean;
321
+ };
322
+ };
323
+ };
324
+ getRequestBody(requestId: string): NetworkActivityAgentBodyResult;
325
+ onRequestSent(event: HttpEventMap["request-sent"]): void;
326
+ onRequestProgress(event: HttpEventMap["request-progress"]): void;
327
+ onResponseReceived(event: HttpEventMap["response-received"]): void;
328
+ onRequestCompleted(event: HttpEventMap["request-completed"]): void;
329
+ onRequestFailed(event: HttpEventMap["request-failed"]): void;
330
+ onWebSocketConnect(event: WebSocketEventMap_2["websocket-connect"]): void;
331
+ onWebSocketOpen(event: WebSocketEventMap_2["websocket-open"]): void;
332
+ onWebSocketClose(event: WebSocketEventMap_2["websocket-close"]): void;
333
+ onWebSocketMessageSent(event: WebSocketEventMap_2["websocket-message-sent"]): void;
334
+ onWebSocketMessageReceived(event: WebSocketEventMap_2["websocket-message-received"]): void;
335
+ onWebSocketError(event: WebSocketEventMap_2["websocket-error"]): void;
336
+ onWebSocketConnectionStatusChanged(event: WebSocketEventMap_2["websocket-connection-status-changed"]): void;
337
+ onSSEOpen(event: SSEEventMap["sse-open"]): void;
338
+ onSSEMessage(event: SSEEventMap["sse-message"]): void;
339
+ onSSEError(event: SSEEventMap["sse-error"]): void;
340
+ onSSEClose(event: SSEEventMap["sse-close"]): void;
341
+ };
342
+
343
+ declare type HttpAgentRecord = {
344
+ requestId: RequestId;
345
+ request: Request_2;
346
+ resourceType: ResourceType;
347
+ initiator: Initiator;
348
+ startTimeMs: number;
349
+ status: 'pending' | 'loading' | 'finished' | 'failed';
350
+ progress?: HttpEventMap['request-progress'];
351
+ response?: Response_2;
352
+ endTimeMs?: number;
353
+ durationMs?: number;
354
+ size?: number | null;
355
+ ttfb?: number;
356
+ error?: string;
357
+ canceled?: boolean;
358
+ };
359
+
360
+ declare type HttpEventMap = {
361
+ 'request-sent': {
362
+ requestId: RequestId;
363
+ request: Request_2;
364
+ timestamp: Timestamp;
365
+ initiator: Initiator;
366
+ type: ResourceType;
367
+ source?: NetworkEventSource;
368
+ };
369
+ 'response-received': {
370
+ requestId: RequestId;
371
+ timestamp: Timestamp;
372
+ type: ResourceType;
373
+ response: Response_2;
374
+ source?: NetworkEventSource;
375
+ };
376
+ 'request-completed': {
377
+ requestId: RequestId;
378
+ timestamp: Timestamp;
379
+ duration: number;
380
+ size: number | null;
381
+ ttfb: number;
382
+ source?: NetworkEventSource;
383
+ };
384
+ 'request-failed': {
385
+ requestId: RequestId;
386
+ timestamp: Timestamp;
387
+ type: ResourceType;
388
+ error: string;
389
+ canceled: boolean;
390
+ source?: NetworkEventSource;
391
+ };
392
+ 'request-progress': {
393
+ requestId: RequestId;
394
+ timestamp: Timestamp;
395
+ loaded: number;
396
+ total: number;
397
+ lengthComputable: boolean;
398
+ source?: NetworkEventSource;
399
+ };
400
+ 'get-response-body': {
401
+ requestId: RequestId;
402
+ };
403
+ 'response-body': {
404
+ requestId: RequestId;
405
+ body: string | null;
406
+ };
407
+ 'set-overrides': {
408
+ overrides: [string, RequestOverride][];
409
+ };
410
+ };
411
+
412
+ export declare type HttpHeaders = Record<string, string | string[]>;
413
+
414
+ export declare type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
415
+
416
+ export declare type Initiator = {
417
+ type: string;
418
+ url?: string;
419
+ lineNumber?: number;
420
+ columnNumber?: number;
421
+ };
422
+
423
+ export declare const NETWORK_ACTIVITY_AGENT_PLUGIN_ID = "@rozenite/network-activity-plugin";
424
+
425
+ export declare type NetworkActivityAgentBodyResult = {
426
+ requestId: string;
427
+ available: boolean;
428
+ body?: string;
429
+ base64Encoded?: boolean;
430
+ decoded?: boolean;
431
+ mimeType?: string;
432
+ reason?: string;
433
+ };
434
+
435
+ export declare type NetworkActivityAgentState = ReturnType<typeof createNetworkActivityAgentState>;
436
+
437
+ export declare type NetworkActivityGetRealtimeConnectionDetailsArgs = NetworkActivityRequestIdArgs;
438
+
439
+ export declare type NetworkActivityGetRealtimeConnectionDetailsResult = ReturnType<NetworkActivityAgentState['getRealtimeConnectionDetails']>;
440
+
441
+ export declare type NetworkActivityGetRecordingStatusArgs = undefined;
442
+
443
+ export declare type NetworkActivityGetRecordingStatusResult = ReturnType<NetworkActivityAgentState['getStatus']>;
444
+
445
+ export declare type NetworkActivityGetRequestBodyArgs = NetworkActivityRequestIdArgs;
446
+
447
+ export declare type NetworkActivityGetRequestBodyResult = NetworkActivityAgentBodyResult;
448
+
449
+ export declare type NetworkActivityGetRequestDetailsArgs = NetworkActivityRequestIdArgs;
450
+
451
+ export declare type NetworkActivityGetRequestDetailsResult = ReturnType<NetworkActivityAgentState['getRequestDetails']>;
452
+
453
+ export declare type NetworkActivityGetResponseBodyArgs = NetworkActivityRequestIdArgs;
454
+
455
+ export declare type NetworkActivityGetResponseBodyResult = NetworkActivityAgentBodyResult;
456
+
457
+ export declare type NetworkActivityListRealtimeConnectionsArgs = NetworkActivityPaginationArgs;
458
+
459
+ export declare type NetworkActivityListRealtimeConnectionsResult = ReturnType<NetworkActivityAgentState['listRealtimeConnections']>;
460
+
461
+ export declare type NetworkActivityListRequestsArgs = NetworkActivityPaginationArgs;
462
+
463
+ export declare type NetworkActivityListRequestsResult = ReturnType<NetworkActivityAgentState['listRequests']>;
464
+
465
+ export declare type NetworkActivityPaginationArgs = {
466
+ limit?: number;
467
+ cursor?: string;
468
+ };
469
+
470
+ export declare type NetworkActivityRequestIdArgs = {
471
+ requestId: string;
472
+ };
473
+
474
+ export declare type NetworkActivityStartRecordingArgs = undefined;
475
+
476
+ export declare type NetworkActivityStartRecordingResult = NetworkActivityGetRecordingStatusResult & {
477
+ started: true;
478
+ };
479
+
480
+ export declare type NetworkActivityStopRecordingArgs = undefined;
481
+
482
+ export declare type NetworkActivityStopRecordingResult = NetworkActivityGetRecordingStatusResult & {
483
+ stopped: true;
484
+ };
485
+
486
+ export declare const networkActivityToolDefinitions: {
487
+ readonly startRecording: AgentToolContract<undefined, NetworkActivityStartRecordingResult>;
488
+ readonly stopRecording: AgentToolContract<undefined, NetworkActivityStopRecordingResult>;
489
+ readonly getRecordingStatus: AgentToolContract<undefined, {
490
+ recording: {
491
+ isRecording: boolean;
492
+ startedAt: number | null;
493
+ stoppedAt: number | null;
494
+ httpRequestCount: number;
495
+ realtimeConnectionCount: number;
496
+ http: {
497
+ totalRecorded: number;
498
+ evictedCount: number;
499
+ truncated: boolean;
500
+ capacity: number;
501
+ };
502
+ realtime: {
503
+ totalRecorded: number;
504
+ evictedCount: number;
505
+ truncated: boolean;
506
+ capacity: number;
507
+ };
508
+ generation: number;
509
+ enabledInspectors: {
510
+ http: boolean;
511
+ websocket: boolean;
512
+ sse: boolean;
513
+ };
514
+ };
515
+ }>;
516
+ readonly listRequests: AgentToolContract<NetworkActivityPaginationArgs, {
517
+ items: {
518
+ requestId: string;
519
+ method: HttpMethod;
520
+ url: string;
521
+ status: number | null;
522
+ type: ResourceType;
523
+ startTimeMs: number;
524
+ endTimeMs: number | null;
525
+ durationMs: number | null;
526
+ transferSize: number | null;
527
+ encodedDataLength: number | null;
528
+ outcome: string;
529
+ }[];
530
+ page: {
531
+ limit: number;
532
+ hasMore: boolean;
533
+ nextCursor?: string;
534
+ };
535
+ recording: {
536
+ isRecording: boolean;
537
+ startedAt: number | null;
538
+ stoppedAt: number | null;
539
+ httpRequestCount: number;
540
+ realtimeConnectionCount: number;
541
+ http: {
542
+ totalRecorded: number;
543
+ evictedCount: number;
544
+ truncated: boolean;
545
+ capacity: number;
546
+ };
547
+ realtime: {
548
+ totalRecorded: number;
549
+ evictedCount: number;
550
+ truncated: boolean;
551
+ capacity: number;
552
+ };
553
+ generation: number;
554
+ enabledInspectors: {
555
+ http: boolean;
556
+ websocket: boolean;
557
+ sse: boolean;
558
+ };
559
+ };
560
+ }>;
561
+ readonly getRequestDetails: AgentToolContract<NetworkActivityRequestIdArgs, {
562
+ request: {
563
+ requestId: string;
564
+ method: HttpMethod;
565
+ url: string;
566
+ type: ResourceType;
567
+ initiator: Initiator;
568
+ startTimeMs: number;
569
+ endTimeMs: number | null;
570
+ durationMs: number | null;
571
+ request: Request_2;
572
+ response: Response_2 | null;
573
+ loadingFinished: boolean;
574
+ loadingFailed: boolean;
575
+ failureText: string | null;
576
+ canceled: boolean;
577
+ progress: {
578
+ loaded: number;
579
+ total: number;
580
+ lengthComputable: boolean;
581
+ } | null;
582
+ ttfb: number | null;
583
+ size: number | null;
584
+ };
585
+ recording: {
586
+ isRecording: boolean;
587
+ startedAt: number | null;
588
+ stoppedAt: number | null;
589
+ httpRequestCount: number;
590
+ realtimeConnectionCount: number;
591
+ http: {
592
+ totalRecorded: number;
593
+ evictedCount: number;
594
+ truncated: boolean;
595
+ capacity: number;
596
+ };
597
+ realtime: {
598
+ totalRecorded: number;
599
+ evictedCount: number;
600
+ truncated: boolean;
601
+ capacity: number;
602
+ };
603
+ generation: number;
604
+ enabledInspectors: {
605
+ http: boolean;
606
+ websocket: boolean;
607
+ sse: boolean;
608
+ };
609
+ };
610
+ }>;
611
+ readonly getRequestBody: AgentToolContract<NetworkActivityRequestIdArgs, NetworkActivityAgentBodyResult>;
612
+ readonly getResponseBody: AgentToolContract<NetworkActivityRequestIdArgs, NetworkActivityAgentBodyResult>;
613
+ readonly listRealtimeConnections: AgentToolContract<NetworkActivityPaginationArgs, {
614
+ items: ({
615
+ requestId: string;
616
+ kind: "websocket";
617
+ url: string;
618
+ status: "connecting" | "open" | "closing" | "closed" | "error";
619
+ startedAt: number;
620
+ endedAt: number | null;
621
+ durationMs: number | null;
622
+ messageCount: number;
623
+ error: string | null;
624
+ closeCode: number | null;
625
+ httpStatus?: undefined;
626
+ } | {
627
+ requestId: string;
628
+ kind: "sse";
629
+ url: string | null;
630
+ status: "connecting" | "open" | "closed" | "error";
631
+ startedAt: number;
632
+ endedAt: number | null;
633
+ durationMs: number | null;
634
+ messageCount: number;
635
+ error: string | null;
636
+ httpStatus: number | null;
637
+ closeCode?: undefined;
638
+ })[];
639
+ page: {
640
+ limit: number;
641
+ hasMore: boolean;
642
+ nextCursor?: string;
643
+ };
644
+ recording: {
645
+ isRecording: boolean;
646
+ startedAt: number | null;
647
+ stoppedAt: number | null;
648
+ httpRequestCount: number;
649
+ realtimeConnectionCount: number;
650
+ http: {
651
+ totalRecorded: number;
652
+ evictedCount: number;
653
+ truncated: boolean;
654
+ capacity: number;
655
+ };
656
+ realtime: {
657
+ totalRecorded: number;
658
+ evictedCount: number;
659
+ truncated: boolean;
660
+ capacity: number;
661
+ };
662
+ generation: number;
663
+ enabledInspectors: {
664
+ http: boolean;
665
+ websocket: boolean;
666
+ sse: boolean;
667
+ };
668
+ };
669
+ }>;
670
+ readonly getRealtimeConnectionDetails: AgentToolContract<NetworkActivityRequestIdArgs, {
671
+ connection: {
672
+ requestId: string;
673
+ kind: "websocket";
674
+ url: string;
675
+ socketId: string;
676
+ status: "connecting" | "open" | "closing" | "closed" | "error";
677
+ startedAt: number;
678
+ endedAt: number | null;
679
+ durationMs: number | null;
680
+ protocols: string[] | null;
681
+ options: string[];
682
+ error: string | null;
683
+ closeCode: number | null;
684
+ closeReason: string | null;
685
+ messages: {
686
+ id: string;
687
+ direction: "sent" | "received";
688
+ data: string;
689
+ messageType: "text" | "binary";
690
+ timestamp: number;
691
+ }[];
692
+ request?: undefined;
693
+ response?: undefined;
694
+ initiator?: undefined;
695
+ resourceType?: undefined;
696
+ } | {
697
+ requestId: string;
698
+ kind: "sse";
699
+ status: "connecting" | "open" | "closed" | "error";
700
+ startedAt: number;
701
+ endedAt: number | null;
702
+ durationMs: number | null;
703
+ request: Request_2 | null;
704
+ response: Response_2 | null;
705
+ initiator: Initiator | null;
706
+ resourceType: ResourceType | null;
707
+ error: string | null;
708
+ messages: {
709
+ id: string;
710
+ type: string;
711
+ data: string;
712
+ timestamp: number;
713
+ }[];
714
+ url?: undefined;
715
+ socketId?: undefined;
716
+ protocols?: undefined;
717
+ options?: undefined;
718
+ closeCode?: undefined;
719
+ closeReason?: undefined;
720
+ };
721
+ recording: {
722
+ isRecording: boolean;
723
+ startedAt: number | null;
724
+ stoppedAt: number | null;
725
+ httpRequestCount: number;
726
+ realtimeConnectionCount: number;
727
+ http: {
728
+ totalRecorded: number;
729
+ evictedCount: number;
730
+ truncated: boolean;
731
+ capacity: number;
732
+ };
733
+ realtime: {
734
+ totalRecorded: number;
735
+ evictedCount: number;
736
+ truncated: boolean;
737
+ capacity: number;
738
+ };
739
+ generation: number;
740
+ enabledInspectors: {
741
+ http: boolean;
742
+ websocket: boolean;
743
+ sse: boolean;
744
+ };
745
+ };
746
+ }>;
747
+ };
748
+
749
+ export declare const networkActivityTools: {
750
+ readonly startRecording: AgentToolDescriptor<undefined, NetworkActivityStartRecordingResult>;
751
+ readonly stopRecording: AgentToolDescriptor<undefined, NetworkActivityStopRecordingResult>;
752
+ readonly getRecordingStatus: AgentToolDescriptor<undefined, {
753
+ recording: {
754
+ isRecording: boolean;
755
+ startedAt: number | null;
756
+ stoppedAt: number | null;
757
+ httpRequestCount: number;
758
+ realtimeConnectionCount: number;
759
+ http: {
760
+ totalRecorded: number;
761
+ evictedCount: number;
762
+ truncated: boolean;
763
+ capacity: number;
764
+ };
765
+ realtime: {
766
+ totalRecorded: number;
767
+ evictedCount: number;
768
+ truncated: boolean;
769
+ capacity: number;
770
+ };
771
+ generation: number;
772
+ enabledInspectors: {
773
+ http: boolean;
774
+ websocket: boolean;
775
+ sse: boolean;
776
+ };
777
+ };
778
+ }>;
779
+ readonly listRequests: AgentToolDescriptor<NetworkActivityPaginationArgs, {
780
+ items: {
781
+ requestId: string;
782
+ method: HttpMethod;
783
+ url: string;
784
+ status: number | null;
785
+ type: ResourceType;
786
+ startTimeMs: number;
787
+ endTimeMs: number | null;
788
+ durationMs: number | null;
789
+ transferSize: number | null;
790
+ encodedDataLength: number | null;
791
+ outcome: string;
792
+ }[];
793
+ page: {
794
+ limit: number;
795
+ hasMore: boolean;
796
+ nextCursor?: string;
797
+ };
798
+ recording: {
799
+ isRecording: boolean;
800
+ startedAt: number | null;
801
+ stoppedAt: number | null;
802
+ httpRequestCount: number;
803
+ realtimeConnectionCount: number;
804
+ http: {
805
+ totalRecorded: number;
806
+ evictedCount: number;
807
+ truncated: boolean;
808
+ capacity: number;
809
+ };
810
+ realtime: {
811
+ totalRecorded: number;
812
+ evictedCount: number;
813
+ truncated: boolean;
814
+ capacity: number;
815
+ };
816
+ generation: number;
817
+ enabledInspectors: {
818
+ http: boolean;
819
+ websocket: boolean;
820
+ sse: boolean;
821
+ };
822
+ };
823
+ }>;
824
+ readonly getRequestDetails: AgentToolDescriptor<NetworkActivityRequestIdArgs, {
825
+ request: {
826
+ requestId: string;
827
+ method: HttpMethod;
828
+ url: string;
829
+ type: ResourceType;
830
+ initiator: Initiator;
831
+ startTimeMs: number;
832
+ endTimeMs: number | null;
833
+ durationMs: number | null;
834
+ request: Request_2;
835
+ response: Response_2 | null;
836
+ loadingFinished: boolean;
837
+ loadingFailed: boolean;
838
+ failureText: string | null;
839
+ canceled: boolean;
840
+ progress: {
841
+ loaded: number;
842
+ total: number;
843
+ lengthComputable: boolean;
844
+ } | null;
845
+ ttfb: number | null;
846
+ size: number | null;
847
+ };
848
+ recording: {
849
+ isRecording: boolean;
850
+ startedAt: number | null;
851
+ stoppedAt: number | null;
852
+ httpRequestCount: number;
853
+ realtimeConnectionCount: number;
854
+ http: {
855
+ totalRecorded: number;
856
+ evictedCount: number;
857
+ truncated: boolean;
858
+ capacity: number;
859
+ };
860
+ realtime: {
861
+ totalRecorded: number;
862
+ evictedCount: number;
863
+ truncated: boolean;
864
+ capacity: number;
865
+ };
866
+ generation: number;
867
+ enabledInspectors: {
868
+ http: boolean;
869
+ websocket: boolean;
870
+ sse: boolean;
871
+ };
872
+ };
873
+ }>;
874
+ readonly getRequestBody: AgentToolDescriptor<NetworkActivityRequestIdArgs, NetworkActivityAgentBodyResult>;
875
+ readonly getResponseBody: AgentToolDescriptor<NetworkActivityRequestIdArgs, NetworkActivityAgentBodyResult>;
876
+ readonly listRealtimeConnections: AgentToolDescriptor<NetworkActivityPaginationArgs, {
877
+ items: ({
878
+ requestId: string;
879
+ kind: "websocket";
880
+ url: string;
881
+ status: "connecting" | "open" | "closing" | "closed" | "error";
882
+ startedAt: number;
883
+ endedAt: number | null;
884
+ durationMs: number | null;
885
+ messageCount: number;
886
+ error: string | null;
887
+ closeCode: number | null;
888
+ httpStatus?: undefined;
889
+ } | {
890
+ requestId: string;
891
+ kind: "sse";
892
+ url: string | null;
893
+ status: "connecting" | "open" | "closed" | "error";
894
+ startedAt: number;
895
+ endedAt: number | null;
896
+ durationMs: number | null;
897
+ messageCount: number;
898
+ error: string | null;
899
+ httpStatus: number | null;
900
+ closeCode?: undefined;
901
+ })[];
902
+ page: {
903
+ limit: number;
904
+ hasMore: boolean;
905
+ nextCursor?: string;
906
+ };
907
+ recording: {
908
+ isRecording: boolean;
909
+ startedAt: number | null;
910
+ stoppedAt: number | null;
911
+ httpRequestCount: number;
912
+ realtimeConnectionCount: number;
913
+ http: {
914
+ totalRecorded: number;
915
+ evictedCount: number;
916
+ truncated: boolean;
917
+ capacity: number;
918
+ };
919
+ realtime: {
920
+ totalRecorded: number;
921
+ evictedCount: number;
922
+ truncated: boolean;
923
+ capacity: number;
924
+ };
925
+ generation: number;
926
+ enabledInspectors: {
927
+ http: boolean;
928
+ websocket: boolean;
929
+ sse: boolean;
930
+ };
931
+ };
932
+ }>;
933
+ readonly getRealtimeConnectionDetails: AgentToolDescriptor<NetworkActivityRequestIdArgs, {
934
+ connection: {
935
+ requestId: string;
936
+ kind: "websocket";
937
+ url: string;
938
+ socketId: string;
939
+ status: "connecting" | "open" | "closing" | "closed" | "error";
940
+ startedAt: number;
941
+ endedAt: number | null;
942
+ durationMs: number | null;
943
+ protocols: string[] | null;
944
+ options: string[];
945
+ error: string | null;
946
+ closeCode: number | null;
947
+ closeReason: string | null;
948
+ messages: {
949
+ id: string;
950
+ direction: "sent" | "received";
951
+ data: string;
952
+ messageType: "text" | "binary";
953
+ timestamp: number;
954
+ }[];
955
+ request?: undefined;
956
+ response?: undefined;
957
+ initiator?: undefined;
958
+ resourceType?: undefined;
959
+ } | {
960
+ requestId: string;
961
+ kind: "sse";
962
+ status: "connecting" | "open" | "closed" | "error";
963
+ startedAt: number;
964
+ endedAt: number | null;
965
+ durationMs: number | null;
966
+ request: Request_2 | null;
967
+ response: Response_2 | null;
968
+ initiator: Initiator | null;
969
+ resourceType: ResourceType | null;
970
+ error: string | null;
971
+ messages: {
972
+ id: string;
973
+ type: string;
974
+ data: string;
975
+ timestamp: number;
976
+ }[];
977
+ url?: undefined;
978
+ socketId?: undefined;
979
+ protocols?: undefined;
980
+ options?: undefined;
981
+ closeCode?: undefined;
982
+ closeReason?: undefined;
983
+ };
984
+ recording: {
985
+ isRecording: boolean;
986
+ startedAt: number | null;
987
+ stoppedAt: number | null;
988
+ httpRequestCount: number;
989
+ realtimeConnectionCount: number;
990
+ http: {
991
+ totalRecorded: number;
992
+ evictedCount: number;
993
+ truncated: boolean;
994
+ capacity: number;
995
+ };
996
+ realtime: {
997
+ totalRecorded: number;
998
+ evictedCount: number;
999
+ truncated: boolean;
1000
+ capacity: number;
1001
+ };
1002
+ generation: number;
1003
+ enabledInspectors: {
1004
+ http: boolean;
1005
+ websocket: boolean;
1006
+ sse: boolean;
1007
+ };
1008
+ };
1009
+ }>;
1010
+ };
1011
+
1012
+ declare type NetworkEventSource = 'builtin' | 'nitro';
1013
+
1014
+ declare type RealtimeAgentRecord = WebSocketAgentRecord | SSEAgentRecord;
1015
+
1016
+ declare type RecordingMetadata = {
1017
+ enabledInspectors: {
1018
+ http: boolean;
1019
+ websocket: boolean;
1020
+ sse: boolean;
1021
+ };
1022
+ };
1023
+
1024
+ declare type Request_2 = {
1025
+ url: string;
1026
+ method: HttpMethod;
1027
+ headers: HttpHeaders;
1028
+ postData?: RequestPostData;
1029
+ };
1030
+ export { Request_2 as Request }
1031
+
1032
+ export declare type RequestBinaryPostData = {
1033
+ type: 'binary';
1034
+ value: {
1035
+ size: number;
1036
+ type?: string;
1037
+ name?: string;
1038
+ };
1039
+ };
1040
+
1041
+ export declare type RequestFormDataPostData = {
1042
+ type: 'form-data';
1043
+ value: Record<string, RequestTextPostData | RequestBinaryPostData>;
1044
+ };
1045
+
1046
+ export declare type RequestId = string;
1047
+
1048
+ export declare type RequestOverride = {
1049
+ status?: number;
1050
+ body?: string;
1051
+ };
1052
+
1053
+ export declare type RequestPostData = RequestTextPostData | RequestFormDataPostData | RequestBinaryPostData | null | undefined;
1054
+
1055
+ export declare type RequestTextPostData = {
1056
+ type: 'text';
1057
+ value: string;
1058
+ };
1059
+
1060
+ export declare type ResourceType = 'XHR' | 'Fetch' | 'Other';
1061
+
1062
+ declare type Response_2 = {
1063
+ url: string;
1064
+ status: number;
1065
+ statusText: string;
1066
+ headers: HttpHeaders;
1067
+ contentType: string;
1068
+ size: number | null;
1069
+ responseTime: Timestamp;
1070
+ };
1071
+ export { Response_2 as Response }
1072
+
1073
+ declare type SSEAgentMessage = {
1074
+ id: string;
1075
+ type: string;
1076
+ data: string;
1077
+ timestamp: number;
1078
+ };
1079
+
1080
+ declare type SSEAgentRecord = {
1081
+ requestId: string;
1082
+ kind: 'sse';
1083
+ status: 'connecting' | 'open' | 'closed' | 'error';
1084
+ startedAt: number;
1085
+ endedAt?: number;
1086
+ durationMs?: number;
1087
+ request?: Request_2;
1088
+ response?: Response_2;
1089
+ initiator?: Initiator;
1090
+ resourceType?: ResourceType;
1091
+ error?: string;
1092
+ messages: SSEAgentMessage[];
1093
+ };
1094
+
1095
+ declare type SSECloseEvent = {
1096
+ type: 'sse-close';
1097
+ requestId: SSERequestId;
1098
+ timestamp: number;
1099
+ };
1100
+
1101
+ declare type SSEErrorEvent = {
1102
+ type: 'sse-error';
1103
+ requestId: SSERequestId;
1104
+ timestamp: number;
1105
+ error: {
1106
+ type: 'error' | 'timeout' | 'exception';
1107
+ message: string;
1108
+ };
1109
+ };
1110
+
1111
+ declare type SSEEvent = SSEOpenEvent | SSEMessageEvent | SSEErrorEvent | SSECloseEvent;
1112
+
1113
+ declare type SSEEventMap = {
1114
+ [K in SSEEvent['type']]: Extract<SSEEvent, {
1115
+ type: K;
1116
+ }>;
1117
+ };
1118
+
1119
+ declare type SSEMessageEvent = {
1120
+ type: 'sse-message';
1121
+ requestId: SSERequestId;
1122
+ timestamp: number;
1123
+ payload: {
1124
+ type: string;
1125
+ data: string;
1126
+ };
1127
+ };
1128
+
1129
+ declare type SSEOpenEvent = {
1130
+ type: 'sse-open';
1131
+ requestId: SSERequestId;
1132
+ timestamp: number;
1133
+ response: Response_2;
1134
+ };
1135
+
1136
+ declare type SSERequestId = string;
1137
+
1138
+ declare type Timestamp = number;
1139
+
1140
+ declare type WebSocketAgentMessage = {
1141
+ id: string;
1142
+ direction: 'sent' | 'received';
1143
+ data: string;
1144
+ messageType: 'text' | 'binary';
1145
+ timestamp: number;
1146
+ };
1147
+
1148
+ declare type WebSocketAgentRecord = {
1149
+ requestId: string;
1150
+ kind: 'websocket';
1151
+ url: string;
1152
+ socketId: string;
1153
+ status: 'connecting' | 'open' | 'closing' | 'closed' | 'error';
1154
+ startedAt: number;
1155
+ endedAt?: number;
1156
+ durationMs?: number;
1157
+ protocols?: string[] | null;
1158
+ options?: string[];
1159
+ error?: string;
1160
+ closeCode?: number;
1161
+ closeReason?: string;
1162
+ messages: WebSocketAgentMessage[];
1163
+ };
1164
+
1165
+ declare type WebSocketCloseEvent = {
1166
+ type: 'websocket-close';
1167
+ url: string;
1168
+ socketId: string;
1169
+ timestamp: number;
1170
+ code: number;
1171
+ reason?: string;
1172
+ source?: NetworkEventSource;
1173
+ };
1174
+
1175
+ declare type WebSocketConnectEvent = {
1176
+ type: 'websocket-connect';
1177
+ url: string;
1178
+ socketId: string;
1179
+ timestamp: number;
1180
+ protocols: string[] | null;
1181
+ options: string[];
1182
+ source?: NetworkEventSource;
1183
+ };
1184
+
1185
+ declare type WebSocketConnectionStatus = 'connecting' | 'open' | 'closing' | 'closed';
1186
+
1187
+ declare type WebSocketConnectionStatusChangedEvent = {
1188
+ type: 'websocket-connection-status-changed';
1189
+ url: string;
1190
+ socketId: string;
1191
+ timestamp: number;
1192
+ status: WebSocketConnectionStatus;
1193
+ source?: NetworkEventSource;
1194
+ };
1195
+
1196
+ declare type WebSocketErrorEvent = {
1197
+ type: 'websocket-error';
1198
+ url: string;
1199
+ socketId: string;
1200
+ timestamp: number;
1201
+ error: string;
1202
+ source?: NetworkEventSource;
1203
+ };
1204
+
1205
+ declare type WebSocketEvent = WebSocketConnectEvent | WebSocketOpenEvent | WebSocketCloseEvent | WebSocketMessageSentEvent | WebSocketMessageReceivedEvent | WebSocketErrorEvent | WebSocketConnectionStatusChangedEvent;
1206
+
1207
+ declare type WebSocketEventMap_2 = {
1208
+ [K in WebSocketEvent['type']]: Extract<WebSocketEvent, {
1209
+ type: K;
1210
+ }>;
1211
+ };
1212
+
1213
+ declare type WebSocketMessageReceivedEvent = {
1214
+ type: 'websocket-message-received';
1215
+ url: string;
1216
+ socketId: string;
1217
+ timestamp: number;
1218
+ data: string;
1219
+ messageType: WebSocketMessageType;
1220
+ source?: NetworkEventSource;
1221
+ };
1222
+
1223
+ declare type WebSocketMessageSentEvent = {
1224
+ type: 'websocket-message-sent';
1225
+ url: string;
1226
+ socketId: string;
1227
+ timestamp: number;
1228
+ data: string;
1229
+ messageType: WebSocketMessageType;
1230
+ source?: NetworkEventSource;
1231
+ };
1232
+
1233
+ declare type WebSocketMessageType = 'text' | 'binary';
1234
+
1235
+ declare type WebSocketOpenEvent = {
1236
+ type: 'websocket-open';
1237
+ url: string;
1238
+ socketId: string;
1239
+ timestamp: number;
1240
+ source?: NetworkEventSource;
1241
+ };
1242
+
1243
+ export { }