@rozenite/network-activity-plugin 1.0.0-alpha.8 → 1.0.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 (160) hide show
  1. package/README.md +2 -0
  2. package/dist/App.html +2 -2
  3. package/dist/assets/{App-R2ZMH9wJ.css → App-BrSkOkws.css} +269 -2
  4. package/dist/assets/{App-lNMijPJ4.js → App-C6wCDVkW.js} +17485 -10814
  5. package/dist/event-source.cjs +22 -0
  6. package/dist/event-source.js +23 -0
  7. package/dist/react-native.cjs +4 -1
  8. package/dist/react-native.js +4 -1
  9. package/dist/rozenite.json +1 -1
  10. package/dist/src/react-native/config.d.ts +20 -0
  11. package/dist/src/react-native/{network-inspector.d.ts → http/network-inspector.d.ts} +1 -1
  12. package/dist/src/react-native/http/overrides-registry.d.ts +6 -0
  13. package/dist/src/react-native/{xhr-interceptor.d.ts → http/xhr-interceptor.d.ts} +7 -1
  14. package/dist/src/react-native/sse/event-source.d.ts +2 -0
  15. package/dist/src/react-native/sse/sse-inspector.d.ts +9 -0
  16. package/dist/src/react-native/sse/sse-interceptor.d.ts +36 -0
  17. package/dist/src/react-native/sse/types.d.ts +6 -0
  18. package/dist/src/react-native/useNetworkActivityDevTools.d.ts +2 -1
  19. package/dist/src/react-native/utils/getBlobName.d.ts +35 -0
  20. package/dist/src/react-native/utils/getFormDataEntries.d.ts +18 -0
  21. package/dist/src/react-native/utils.d.ts +6 -0
  22. package/dist/src/react-native/websocket/websocket-inspector.d.ts +9 -0
  23. package/dist/src/react-native/websocket/websocket-interceptor.d.ts +74 -0
  24. package/dist/src/shared/client.d.ts +53 -6
  25. package/dist/src/shared/sse-events.d.ts +38 -0
  26. package/dist/src/shared/websocket-events.d.ts +60 -0
  27. package/dist/src/ui/components/Badge.d.ts +1 -1
  28. package/dist/src/ui/components/Button.d.ts +2 -2
  29. package/dist/src/ui/components/CodeBlock.d.ts +3 -0
  30. package/dist/src/ui/components/CodeEditor.d.ts +5 -0
  31. package/dist/src/ui/components/CookieCard.d.ts +7 -0
  32. package/dist/src/ui/components/CopyRequestDropdown.d.ts +7 -0
  33. package/dist/src/ui/components/DropdownMenu.d.ts +27 -0
  34. package/dist/src/ui/components/FilterBar.d.ts +10 -0
  35. package/dist/src/ui/components/JsonTreeCopyableItem.d.ts +7 -0
  36. package/dist/src/ui/components/KeyValueGrid.d.ts +13 -0
  37. package/dist/src/ui/components/OverrideResponse.d.ts +8 -0
  38. package/dist/src/ui/components/RequestBody.d.ts +6 -0
  39. package/dist/src/ui/components/RequestList.d.ts +13 -28
  40. package/dist/src/ui/components/ScrollArea.d.ts +3 -2
  41. package/dist/src/ui/components/Section.d.ts +8 -0
  42. package/dist/src/ui/components/Separator.d.ts +2 -1
  43. package/dist/src/ui/components/SidePanel.d.ts +1 -0
  44. package/dist/src/ui/components/Tabs.d.ts +7 -0
  45. package/dist/src/ui/components/Toolbar.d.ts +1 -0
  46. package/dist/src/ui/hooks/useCopyToClipboard.d.ts +4 -0
  47. package/dist/src/ui/state/derived.d.ts +5 -0
  48. package/dist/src/ui/state/hooks.d.ts +21 -0
  49. package/dist/src/ui/state/model.d.ts +103 -0
  50. package/dist/src/ui/state/store.d.ts +48 -0
  51. package/dist/src/ui/tabs/CookiesTab.d.ts +3 -6
  52. package/dist/src/ui/tabs/HeadersTab.d.ts +3 -15
  53. package/dist/src/ui/tabs/MessagesTab.d.ts +5 -0
  54. package/dist/src/ui/tabs/RequestTab.d.ts +2 -7
  55. package/dist/src/ui/tabs/ResponseTab.d.ts +2 -8
  56. package/dist/src/ui/tabs/SSEMessagesTab.d.ts +5 -0
  57. package/dist/src/ui/tabs/TimingTab.d.ts +3 -5
  58. package/dist/src/ui/types.d.ts +4 -1
  59. package/dist/src/ui/utils/assert.d.ts +1 -0
  60. package/dist/src/ui/utils/checkRequestBodyBinary.d.ts +2 -0
  61. package/dist/src/ui/utils/copyToClipboard.d.ts +1 -0
  62. package/dist/src/ui/utils/escapeShellArg.d.ts +1 -0
  63. package/dist/src/ui/utils/generateCurlCommand.d.ts +2 -0
  64. package/dist/src/ui/utils/generateFetchCall.d.ts +2 -0
  65. package/dist/src/ui/utils/generateMultipartBody.d.ts +4 -0
  66. package/dist/src/ui/utils/getId.d.ts +1 -0
  67. package/dist/src/ui/utils/getStatusColor.d.ts +1 -0
  68. package/dist/src/utils/applyReactNativeRequestHeadersLogic.d.ts +7 -0
  69. package/dist/src/utils/applyReactNativeResponseHeadersLogic.d.ts +9 -0
  70. package/dist/src/utils/cookieParser.d.ts +6 -0
  71. package/dist/src/utils/getContentTypeMimeType.d.ts +2 -0
  72. package/dist/src/utils/getHttpHeader.d.ts +5 -0
  73. package/dist/src/utils/getHttpHeaderValueAsString.d.ts +11 -0
  74. package/dist/src/utils/getStringSizeInBytes.d.ts +1 -0
  75. package/dist/src/utils/inferContentTypeFromPostData.d.ts +2 -0
  76. package/dist/src/utils/safeStringify.d.ts +1 -0
  77. package/dist/src/utils/typeChecks.d.ts +9 -0
  78. package/dist/useNetworkActivityDevTools.cjs +724 -40
  79. package/dist/useNetworkActivityDevTools.js +723 -41
  80. package/package.json +22 -8
  81. package/react-native.ts +6 -1
  82. package/src/react-native/config.ts +43 -0
  83. package/src/react-native/http/network-inspector.ts +388 -0
  84. package/src/react-native/http/overrides-registry.ts +32 -0
  85. package/src/react-native/{xhr-interceptor.ts → http/xhr-interceptor.ts} +19 -2
  86. package/src/react-native/{xml-request.d.ts → http/xml-request.d.ts} +1 -0
  87. package/src/react-native/sse/event-source.ts +25 -0
  88. package/src/react-native/sse/sse-inspector.ts +139 -0
  89. package/src/react-native/sse/sse-interceptor.ts +180 -0
  90. package/src/react-native/sse/types.ts +9 -0
  91. package/src/react-native/useNetworkActivityDevTools.ts +156 -4
  92. package/src/react-native/utils/getBlobName.ts +45 -0
  93. package/src/react-native/utils/getFormDataEntries.ts +32 -0
  94. package/src/react-native/utils.ts +43 -0
  95. package/src/react-native/websocket/websocket-inspector.ts +180 -0
  96. package/src/react-native/websocket/websocket-interceptor.d.ts +4 -0
  97. package/src/react-native/websocket/websocket-interceptor.ts +166 -0
  98. package/src/shared/client.ts +79 -6
  99. package/src/shared/sse-events.ts +47 -0
  100. package/src/shared/websocket-events.ts +79 -0
  101. package/src/ui/components/Button.tsx +1 -0
  102. package/src/ui/components/CodeBlock.tsx +19 -0
  103. package/src/ui/components/CodeEditor.tsx +26 -0
  104. package/src/ui/components/CookieCard.tsx +64 -0
  105. package/src/ui/components/CopyRequestDropdown.tsx +95 -0
  106. package/src/ui/components/DropdownMenu.tsx +206 -0
  107. package/src/ui/components/FilterBar.tsx +117 -0
  108. package/src/ui/components/Input.tsx +1 -1
  109. package/src/ui/components/JsonTree.tsx +20 -0
  110. package/src/ui/components/JsonTreeCopyableItem.tsx +37 -0
  111. package/src/ui/components/KeyValueGrid.tsx +51 -0
  112. package/src/ui/components/OverrideResponse.tsx +132 -0
  113. package/src/ui/components/RequestBody.tsx +86 -0
  114. package/src/ui/components/RequestList.tsx +101 -131
  115. package/src/ui/components/ScrollArea.tsx +1 -0
  116. package/src/ui/components/Section.tsx +46 -0
  117. package/src/ui/components/SidePanel.tsx +333 -0
  118. package/src/ui/components/Tabs.tsx +1 -1
  119. package/src/ui/components/Toolbar.tsx +45 -0
  120. package/src/ui/globals.css +4 -0
  121. package/src/ui/hooks/useCopyToClipboard.ts +28 -0
  122. package/src/ui/state/derived.ts +112 -0
  123. package/src/ui/state/hooks.ts +52 -0
  124. package/src/ui/state/model.ts +140 -0
  125. package/src/ui/state/store.ts +669 -0
  126. package/src/ui/tabs/CookiesTab.tsx +61 -278
  127. package/src/ui/tabs/HeadersTab.tsx +85 -103
  128. package/src/ui/tabs/MessagesTab.tsx +276 -0
  129. package/src/ui/tabs/RequestTab.tsx +58 -51
  130. package/src/ui/tabs/ResponseTab.tsx +101 -74
  131. package/src/ui/tabs/SSEMessagesTab.tsx +224 -0
  132. package/src/ui/tabs/TimingTab.tsx +30 -43
  133. package/src/ui/types.ts +4 -1
  134. package/src/ui/utils/assert.ts +5 -0
  135. package/src/ui/utils/checkRequestBodyBinary.ts +7 -0
  136. package/src/ui/utils/copyToClipboard.ts +3 -0
  137. package/src/ui/utils/escapeShellArg.ts +12 -0
  138. package/src/ui/utils/generateCurlCommand.ts +83 -0
  139. package/src/ui/utils/generateFetchCall.ts +64 -0
  140. package/src/ui/utils/generateMultipartBody.ts +19 -0
  141. package/src/ui/utils/getId.ts +10 -0
  142. package/src/ui/utils/getStatusColor.ts +15 -0
  143. package/src/ui/views/InspectorView.tsx +35 -319
  144. package/src/utils/applyReactNativeRequestHeadersLogic.ts +30 -0
  145. package/src/utils/applyReactNativeResponseHeadersLogic.ts +28 -0
  146. package/src/utils/cookieParser.ts +126 -0
  147. package/src/utils/getContentTypeMimeType.ts +17 -0
  148. package/src/utils/getHttpHeader.ts +17 -0
  149. package/src/utils/getHttpHeaderValueAsString.ts +13 -0
  150. package/src/utils/getStringSizeInBytes.ts +3 -0
  151. package/src/utils/inferContentTypeFromPostData.ts +9 -0
  152. package/src/utils/safeStringify.ts +7 -0
  153. package/src/utils/typeChecks.ts +27 -0
  154. package/tailwind.config.ts +3 -0
  155. package/vite.config.ts +12 -0
  156. package/dist/src/ui/utils/getHttpHeaderValue.d.ts +0 -2
  157. package/src/react-native/network-inspector.ts +0 -247
  158. package/src/ui/utils/getHttpHeaderValue.ts +0 -14
  159. /package/dist/src/react-native/{network-requests-registry.d.ts → http/network-requests-registry.d.ts} +0 -0
  160. /package/src/react-native/{network-requests-registry.ts → http/network-requests-registry.ts} +0 -0
@@ -0,0 +1,13 @@
1
+ import { default as React } from 'react';
2
+ export type KeyValueItem = {
3
+ key: string;
4
+ value: React.ReactNode;
5
+ keyClassName?: string;
6
+ valueClassName?: string;
7
+ };
8
+ export type KeyValueGridProps = {
9
+ items?: KeyValueItem[];
10
+ emptyMessage?: string;
11
+ className?: string;
12
+ };
13
+ export declare const KeyValueGrid: ({ items, emptyMessage, className, }: KeyValueGridProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,8 @@
1
+ import { HttpNetworkEntry } from '../state/model';
2
+ import { RequestOverride } from '../../shared/client';
3
+ export type OverrideResponseProps = {
4
+ selectedRequest: HttpNetworkEntry;
5
+ initialOverride: RequestOverride | undefined;
6
+ onClear: () => void;
7
+ };
8
+ export declare const OverrideResponse: ({ selectedRequest, initialOverride, onClear, }: OverrideResponseProps) => import("react/jsx-runtime").JSX.Element | undefined;
@@ -0,0 +1,6 @@
1
+ import { HttpRequestData } from '../state/model';
2
+ type RequestBodyProps = {
3
+ data: HttpRequestData['data'];
4
+ };
5
+ export declare const RequestBody: ({ data }: RequestBodyProps) => import("react/jsx-runtime").JSX.Element | null;
6
+ export {};
@@ -1,31 +1,18 @@
1
- import { NetworkEntry } from '../types';
2
- import { RequestId } from '../../shared/client';
3
- import * as React from 'react';
1
+ import { ProcessedRequest } from '../state/model';
2
+ import { RequestId, RequestOverride } from '../../shared/client';
3
+ import { FilterState } from './FilterBar';
4
4
  type NetworkRequest = {
5
- id: string;
5
+ id: RequestId;
6
6
  name: string;
7
- status: number;
7
+ status: string | number;
8
8
  method: string;
9
9
  domain: string;
10
10
  path: string;
11
11
  size: string;
12
12
  time: string;
13
13
  type: string;
14
- initiator: string;
15
14
  startTime: string;
16
- requestBody?: {
17
- type: string;
18
- data: string;
19
- };
20
- responseBody?: {
21
- type: string;
22
- data: string | null;
23
- };
24
- };
25
- type RequestListProps = {
26
- networkEntries: Map<RequestId, NetworkEntry>;
27
- selectedRequestId: RequestId | null;
28
- onRequestSelect: (requestId: RequestId) => void;
15
+ hasOverride: boolean;
29
16
  };
30
17
  declare const formatSize: (bytes: number) => string;
31
18
  declare const formatDuration: (duration: number) => string;
@@ -34,12 +21,10 @@ declare const extractDomainAndPath: (url: string) => {
34
21
  domain: string;
35
22
  path: string;
36
23
  };
37
- declare const generateName: (url: string) => string;
38
- declare const formatInitiator: (initiator: any) => string;
39
- declare const mapResourceType: (type: string) => string;
40
- declare const getTypeColor: (type: string) => string;
41
- declare const getStatusColor: (status: number) => "text-gray-400" | "text-green-400" | "text-yellow-400" | "text-red-400";
42
- declare const processNetworkEntries: (networkEntries: Map<RequestId, NetworkEntry>) => NetworkRequest[];
43
- export declare const RequestList: React.FC<RequestListProps>;
44
- export { formatSize, formatDuration, formatStartTime, extractDomainAndPath, generateName, formatInitiator, mapResourceType, getTypeColor, getStatusColor, processNetworkEntries, };
45
- export type { NetworkRequest };
24
+ declare const generateName: (url: string, showEntirePathName?: boolean) => string;
25
+ declare const processNetworkRequests: (processedRequests: ProcessedRequest[], overrides: Map<string, RequestOverride>, showEntirePathAsName?: boolean) => NetworkRequest[];
26
+ export type RequestListProps = {
27
+ filter: FilterState;
28
+ };
29
+ export declare const RequestList: ({ filter }: RequestListProps) => import("react/jsx-runtime").JSX.Element;
30
+ export { formatSize, formatDuration, formatStartTime, extractDomainAndPath, generateName, processNetworkRequests, };
@@ -1,4 +1,5 @@
1
1
  import * as React from 'react';
2
- declare const ScrollArea: React.ForwardRefExoticComponent<React.RefAttributes<never>>;
3
- declare const ScrollBar: React.ForwardRefExoticComponent<React.RefAttributes<never>>;
2
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
3
+ declare const ScrollArea: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ declare const ScrollBar: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
5
  export { ScrollArea, ScrollBar };
@@ -0,0 +1,8 @@
1
+ import { default as React } from 'react';
2
+ export type SectionProps = {
3
+ title: string;
4
+ children: React.ReactNode;
5
+ collapsible?: boolean;
6
+ action?: React.ReactNode;
7
+ };
8
+ export declare const Section: ({ title, children, collapsible, action, }: SectionProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,3 +1,4 @@
1
1
  import * as React from 'react';
2
- declare const Separator: React.ForwardRefExoticComponent<React.RefAttributes<never>>;
2
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
3
+ declare const Separator: React.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
3
4
  export { Separator };
@@ -0,0 +1 @@
1
+ export declare const SidePanel: () => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
3
+ declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>;
4
+ declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1 @@
1
+ export declare const Toolbar: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export declare function useCopyToClipboard(): {
2
+ isCopied: boolean;
3
+ copy: (value: string) => Promise<void>;
4
+ };
@@ -0,0 +1,5 @@
1
+ import { NetworkActivityState } from './store';
2
+ import { ProcessedRequest } from './model';
3
+ export declare const getProcessedRequests: (obj: NetworkActivityState) => ProcessedRequest[];
4
+ export declare const getSelectedRequest: (obj: NetworkActivityState) => import('./model').NetworkEntry | null;
5
+ export declare const getRequestSummary: (requestId: string) => ((state: NetworkActivityState) => ProcessedRequest | null);
@@ -0,0 +1,21 @@
1
+ import { NetworkActivityState } from './store';
2
+ export declare const useNetworkActivityStore: <T>(selector: (state: NetworkActivityState) => T) => T;
3
+ export declare const useProcessedRequests: () => import('./model').ProcessedRequest[];
4
+ export declare const useSelectedRequest: () => import('./model').NetworkEntry | null;
5
+ export declare const useHasSelectedRequest: () => boolean;
6
+ export declare const useSelectedRequestId: () => string | null;
7
+ export declare const useIsRecording: () => boolean;
8
+ export declare const useNetworkActivityActions: () => {
9
+ setRecording: (isRecording: boolean) => void;
10
+ setSelectedRequest: (requestId: import('../../shared/client').RequestId | null) => void;
11
+ clearRequests: () => void;
12
+ addOverride: (requestUrl: string, override: import('../../shared/client').RequestOverride) => void;
13
+ clearOverride: (requestUrl: string) => void;
14
+ };
15
+ export declare const useNetworkActivityClientManagement: () => {
16
+ setupClient: (client: import('../../shared/client').NetworkActivityDevToolsClient) => void;
17
+ cleanupClient: () => void;
18
+ };
19
+ export declare const useWebSocketMessages: (requestId: string) => import('./model').WebSocketMessage[];
20
+ export declare const useOverrides: () => Map<string, import('../../shared/client').RequestOverride>;
21
+ export declare const useClientUISettings: () => import('../../shared/client').NetworkActivityClientUISettings | null;
@@ -0,0 +1,103 @@
1
+ import { Initiator, ResourceType, HttpHeaders, RequestPostData } from '../../shared/client';
2
+ export type RequestId = string;
3
+ export type Timestamp = number;
4
+ export type SocketId = number;
5
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
6
+ export type NetworkEntryType = 'http' | 'websocket' | 'sse';
7
+ export type HttpRequestData = {
8
+ type: string;
9
+ data: NonNullable<RequestPostData>;
10
+ };
11
+ export type HttpResponseData = {
12
+ type: string;
13
+ data: string;
14
+ };
15
+ export type HttpRequest = {
16
+ url: string;
17
+ method: HttpMethod;
18
+ headers: HttpHeaders;
19
+ body?: HttpRequestData;
20
+ };
21
+ export type HttpResponse = {
22
+ url: string;
23
+ status: number;
24
+ statusText: string;
25
+ headers: HttpHeaders;
26
+ contentType: string;
27
+ size: number;
28
+ responseTime: Timestamp;
29
+ body?: HttpResponseData;
30
+ };
31
+ export type HttpStatus = 'pending' | 'loading' | 'finished' | 'failed';
32
+ export type HttpNetworkEntry = {
33
+ id: RequestId;
34
+ type: 'http';
35
+ timestamp: Timestamp;
36
+ duration?: number;
37
+ request: HttpRequest;
38
+ response?: HttpResponse;
39
+ status: HttpStatus;
40
+ error?: string;
41
+ canceled?: boolean;
42
+ ttfb?: number;
43
+ size?: number;
44
+ initiator?: Initiator;
45
+ resourceType?: ResourceType;
46
+ };
47
+ export type SSEMessage = {
48
+ id: string;
49
+ type: string;
50
+ data: string;
51
+ timestamp: Timestamp;
52
+ };
53
+ export type SSEStatus = 'connecting' | 'open' | 'closed' | 'error';
54
+ export type SSENetworkEntry = {
55
+ id: RequestId;
56
+ type: 'sse';
57
+ timestamp: Timestamp;
58
+ duration?: number;
59
+ request: HttpRequest;
60
+ response?: HttpResponse;
61
+ status: SSEStatus;
62
+ messages: SSEMessage[];
63
+ error?: string;
64
+ initiator?: Initiator;
65
+ resourceType?: ResourceType;
66
+ };
67
+ export type WebSocketConnection = {
68
+ url: string;
69
+ socketId: SocketId;
70
+ protocols?: string[];
71
+ options?: string[];
72
+ };
73
+ export type WebSocketMessage = {
74
+ id: string;
75
+ direction: 'sent' | 'received';
76
+ data: string;
77
+ messageType: 'text' | 'binary';
78
+ timestamp: Timestamp;
79
+ };
80
+ export type WebSocketStatus = 'connecting' | 'open' | 'closing' | 'closed' | 'error';
81
+ export type WebSocketNetworkEntry = {
82
+ id: RequestId;
83
+ type: 'websocket';
84
+ timestamp: Timestamp;
85
+ duration?: number;
86
+ connection: WebSocketConnection;
87
+ status: WebSocketStatus;
88
+ error?: string;
89
+ closeCode?: number;
90
+ closeReason?: string;
91
+ };
92
+ export type NetworkEntry = HttpNetworkEntry | WebSocketNetworkEntry | SSENetworkEntry;
93
+ export type ProcessedRequest = {
94
+ id: RequestId;
95
+ type: NetworkEntryType;
96
+ name: string;
97
+ status: HttpStatus | WebSocketStatus | SSEStatus;
98
+ timestamp: Timestamp;
99
+ duration?: number;
100
+ size: number | null;
101
+ method: HttpMethod | 'WS' | 'SSE';
102
+ httpStatus?: number;
103
+ };
@@ -0,0 +1,48 @@
1
+ import { NetworkActivityDevToolsClient, NetworkActivityEventMap, RequestOverride, RequestId, NetworkActivityClientUISettings } from '../../shared/client';
2
+ import { NetworkEntry, WebSocketMessage } from './model';
3
+ export interface NetworkActivityState {
4
+ isRecording: boolean;
5
+ selectedRequestId: RequestId | null;
6
+ networkEntries: Map<RequestId, NetworkEntry>;
7
+ websocketMessages: Map<RequestId, WebSocketMessage[]>;
8
+ overrides: Map<string, RequestOverride>;
9
+ clientUISettings: NetworkActivityClientUISettings | null;
10
+ _unsubscribeFunctions?: Array<{
11
+ remove: () => void;
12
+ }>;
13
+ _client?: NetworkActivityDevToolsClient;
14
+ actions: {
15
+ setRecording: (isRecording: boolean) => void;
16
+ setSelectedRequest: (requestId: RequestId | null) => void;
17
+ clearRequests: () => void;
18
+ addOverride: (requestUrl: string, override: RequestOverride) => void;
19
+ clearOverride: (requestUrl: string) => void;
20
+ };
21
+ handleEvent: <K extends keyof NetworkActivityEventMap>(eventType: K, data: NetworkActivityEventMap[K]) => void;
22
+ client: {
23
+ setupClient: (client: NetworkActivityDevToolsClient) => void;
24
+ cleanupClient: () => void;
25
+ };
26
+ }
27
+ export declare const createNetworkActivityStore: () => Omit<import('zustand').StoreApi<NetworkActivityState>, "persist"> & {
28
+ persist: {
29
+ setOptions: (options: Partial<import('zustand/middleware').PersistOptions<NetworkActivityState, unknown>>) => void;
30
+ clearStorage: () => void;
31
+ rehydrate: () => Promise<void> | void;
32
+ hasHydrated: () => boolean;
33
+ onHydrate: (fn: (state: NetworkActivityState) => void) => () => void;
34
+ onFinishHydration: (fn: (state: NetworkActivityState) => void) => () => void;
35
+ getOptions: () => Partial<import('zustand/middleware').PersistOptions<NetworkActivityState, unknown>>;
36
+ };
37
+ };
38
+ export declare const store: Omit<import('zustand').StoreApi<NetworkActivityState>, "persist"> & {
39
+ persist: {
40
+ setOptions: (options: Partial<import('zustand/middleware').PersistOptions<NetworkActivityState, unknown>>) => void;
41
+ clearStorage: () => void;
42
+ rehydrate: () => Promise<void> | void;
43
+ hasHydrated: () => boolean;
44
+ onHydrate: (fn: (state: NetworkActivityState) => void) => () => void;
45
+ onFinishHydration: (fn: (state: NetworkActivityState) => void) => () => void;
46
+ getOptions: () => Partial<import('zustand/middleware').PersistOptions<NetworkActivityState, unknown>>;
47
+ };
48
+ };
@@ -1,8 +1,5 @@
1
- import { NetworkEntry } from '../types';
1
+ import { HttpNetworkEntry, SSENetworkEntry } from '../state/model';
2
2
  export type CookiesTabProps = {
3
- selectedRequest: {
4
- id: string;
5
- };
6
- networkEntries: Map<string, NetworkEntry>;
3
+ selectedRequest: HttpNetworkEntry | SSENetworkEntry;
7
4
  };
8
- export declare const CookiesTab: ({ selectedRequest, networkEntries, }: CookiesTabProps) => import("react/jsx-runtime").JSX.Element;
5
+ export declare const CookiesTab: ({ selectedRequest }: CookiesTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,17 +1,5 @@
1
- import { NetworkEntry } from '../types';
1
+ import { HttpNetworkEntry, SSENetworkEntry } from '../state/model';
2
2
  export type HeadersTabProps = {
3
- selectedRequest: {
4
- id: string;
5
- domain: string;
6
- path: string;
7
- method: string;
8
- status: number;
9
- requestBody?: {
10
- type: string;
11
- data: string;
12
- };
13
- };
14
- networkEntries: Map<string, NetworkEntry>;
15
- getStatusColor: (status: number) => string;
3
+ selectedRequest: HttpNetworkEntry | SSENetworkEntry;
16
4
  };
17
- export declare const HeadersTab: ({ selectedRequest, networkEntries, getStatusColor, }: HeadersTabProps) => import("react/jsx-runtime").JSX.Element;
5
+ export declare const HeadersTab: ({ selectedRequest }: HeadersTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { WebSocketNetworkEntry } from '../state/model';
2
+ export type MessagesTabProps = {
3
+ selectedRequest: WebSocketNetworkEntry;
4
+ };
5
+ export declare const MessagesTab: ({ selectedRequest }: MessagesTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,10 +1,5 @@
1
+ import { HttpNetworkEntry, SSENetworkEntry } from '../state/model';
1
2
  export type RequestTabProps = {
2
- selectedRequest: {
3
- method: string;
4
- requestBody?: {
5
- type: string;
6
- data: string;
7
- };
8
- };
3
+ selectedRequest: HttpNetworkEntry | SSENetworkEntry;
9
4
  };
10
5
  export declare const RequestTab: ({ selectedRequest }: RequestTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,12 +1,6 @@
1
+ import { HttpNetworkEntry } from '../state/model';
1
2
  export type ResponseTabProps = {
2
- selectedRequest: {
3
- id: string;
4
- type: string;
5
- responseBody?: {
6
- type: string;
7
- data: string | null;
8
- };
9
- };
3
+ selectedRequest: HttpNetworkEntry;
10
4
  onRequestResponseBody: (requestId: string) => void;
11
5
  };
12
6
  export declare const ResponseTab: ({ selectedRequest, onRequestResponseBody, }: ResponseTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { SSENetworkEntry } from '../state/model';
2
+ export type SSEMessagesTabProps = {
3
+ selectedRequest: SSENetworkEntry;
4
+ };
5
+ export declare const SSEMessagesTab: ({ selectedRequest }: SSEMessagesTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,5 @@
1
- import { NetworkRequest } from '../components/RequestList';
2
- import { NetworkEntry } from '../types';
1
+ import { HttpNetworkEntry } from '../state/model';
3
2
  export type TimingTabProps = {
4
- selectedRequest: NetworkRequest | null;
5
- networkEntries: Map<string, NetworkEntry>;
3
+ selectedRequest: HttpNetworkEntry;
6
4
  };
7
- export declare const TimingTab: ({ selectedRequest, networkEntries, }: TimingTabProps) => import("react/jsx-runtime").JSX.Element;
5
+ export declare const TimingTab: ({ selectedRequest }: TimingTabProps) => import("react/jsx-runtime").JSX.Element;
@@ -4,7 +4,10 @@ export type NetworkEntry = {
4
4
  url: string;
5
5
  method: string;
6
6
  headers: HttpHeaders;
7
- postData?: string;
7
+ body?: {
8
+ type: string;
9
+ data: string;
10
+ };
8
11
  status: 'pending' | 'loading' | 'finished' | 'failed';
9
12
  startTime: number;
10
13
  endTime?: number;
@@ -0,0 +1 @@
1
+ export declare function assert(condition: boolean, message: string): asserts condition;
@@ -0,0 +1,2 @@
1
+ import { NetworkEntry } from '../state/model';
2
+ export declare const checkRequestBodyBinary: (request: NetworkEntry) => boolean;
@@ -0,0 +1 @@
1
+ export declare function copyToClipboard(text: string): Promise<void>;
@@ -0,0 +1 @@
1
+ export declare function escapeShellArg(arg: string): string;
@@ -0,0 +1,2 @@
1
+ import { HttpNetworkEntry, SSENetworkEntry } from '../state/model';
2
+ export declare function generateCurlCommand(request: HttpNetworkEntry | SSENetworkEntry): string;
@@ -0,0 +1,2 @@
1
+ import { HttpNetworkEntry, SSENetworkEntry } from '../state/model';
2
+ export declare const generateFetchCall: (request: HttpNetworkEntry | SSENetworkEntry) => string;
@@ -0,0 +1,4 @@
1
+ export declare const generateMultipartBody: (formData: Record<string, unknown>) => {
2
+ body: string;
3
+ contentType: string;
4
+ };
@@ -0,0 +1 @@
1
+ export declare const getId: (namespace: string) => string;
@@ -0,0 +1 @@
1
+ export declare const getStatusColor: (status: number | string) => string;
@@ -0,0 +1,7 @@
1
+ import { HttpHeaders, RequestPostData } from '../shared/client';
2
+ /**
3
+ * Partially emulates React Native's behavior for setting HTTP headers.
4
+ *
5
+ * @see https://github.com/facebook/react-native/blob/de5093c88771977b58f7bec3f3ffa64a9595334e/packages/react-native/Libraries/Network/RCTNetworking.mm#L345-L349
6
+ */
7
+ export declare function applyReactNativeRequestHeadersLogic(headers: HttpHeaders, postData?: RequestPostData): HttpHeaders;
@@ -0,0 +1,9 @@
1
+ import { HttpHeaders, XHRHeaders } from '../shared/client';
2
+ /**
3
+ * Applies React Native specific logic to response headers.
4
+ * React Native concatenates multiple header values into single strings,
5
+ * this function parses them back into arrays where appropriate.
6
+ *
7
+ * @see https://github.com/facebook/react-native/blob/588f0c5ce6c283f116228456da2170d2adc3cbf4/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java#L637
8
+ */
9
+ export declare const applyReactNativeResponseHeadersLogic: (headers: XHRHeaders) => HttpHeaders;
@@ -0,0 +1,6 @@
1
+ import { Cookie, HttpHeaders } from '../shared/client';
2
+ export declare const parseSetCookieHeader: (setCookieStr: string) => Cookie;
3
+ export declare const splitSetCookieHeaderByComma: (header: string) => string[];
4
+ export declare const parseCookieHeader: (cookieString: string) => Cookie[];
5
+ export declare const parseRequestCookiesFromHeaders: (headers: HttpHeaders) => Cookie[];
6
+ export declare const parseResponseCookiesFromHeaders: (headers: HttpHeaders) => Cookie[];
@@ -0,0 +1,2 @@
1
+ import { HttpHeaders } from '../shared/client';
2
+ export declare function getContentTypeMime(headers: HttpHeaders): string | undefined;
@@ -0,0 +1,5 @@
1
+ import { HttpHeaders, XHRHeaders } from '../shared/client';
2
+ export declare function getHttpHeader<T extends HttpHeaders | XHRHeaders>(headers: T, name: string): {
3
+ value: T[Extract<keyof T, string>];
4
+ originalKey: Extract<keyof T, string>;
5
+ } | undefined;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Combines multiple HTTP header values according to RFC 7230 Section 3.2.2
3
+ *
4
+ * Per RFC 7230 Section 3.2.2: "A recipient MAY combine multiple header fields
5
+ * with the same field name into one 'field-name: field-value' pair, without
6
+ * changing the semantics of the message, by appending each subsequent field
7
+ * value to the combined field value in order, separated by a comma."
8
+ *
9
+ * @see https://tools.ietf.org/html/rfc7230#section-3.2.2
10
+ */
11
+ export declare function getHttpHeaderValueAsString(value: string | string[]): string;
@@ -0,0 +1 @@
1
+ export declare const getStringSizeInBytes: (value: string) => number;
@@ -0,0 +1,2 @@
1
+ import { RequestPostData } from '../shared/client';
2
+ export declare function inferContentTypeFromPostData(postData: RequestPostData): "multipart/form-data" | undefined;
@@ -0,0 +1 @@
1
+ export declare function safeStringify(data: unknown): string;
@@ -0,0 +1,9 @@
1
+ export declare const isBlob: (value: unknown) => value is Blob;
2
+ export declare const isArrayBuffer: (value: unknown) => value is ArrayBuffer | ArrayBufferView;
3
+ export declare const isFormData: (value: unknown) => value is FormData;
4
+ export declare const isNullOrUndefined: (value: unknown) => value is null | undefined;
5
+ export declare const isString: (value: unknown) => value is string;
6
+ export declare const isNumber: (value: unknown) => value is number;
7
+ export declare const isBoolean: (value: unknown) => value is boolean;
8
+ export declare const isObject: (value: unknown) => value is object;
9
+ export declare const isArray: (value: unknown) => value is unknown[];