@rozenite/network-activity-plugin 1.0.0-alpha.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/App.html +2 -2
- package/dist/assets/{App-DoHQsY5s.css → App-BrSkOkws.css} +223 -2
- package/dist/assets/{App-CA1Fbh0I.js → App-Kyi7zHUX.js} +8188 -2671
- package/dist/react-native.cjs +4 -1
- package/dist/react-native.js +4 -1
- package/dist/rozenite.json +1 -1
- package/dist/src/react-native/config.d.ts +20 -0
- package/dist/src/react-native/http/overrides-registry.d.ts +6 -0
- package/dist/src/react-native/http/xhr-interceptor.d.ts +7 -1
- package/dist/src/react-native/sse/sse-interceptor.d.ts +2 -2
- package/dist/src/react-native/useNetworkActivityDevTools.d.ts +2 -1
- package/dist/src/react-native/utils/getBlobName.d.ts +35 -0
- package/dist/src/react-native/utils/getFormDataEntries.d.ts +18 -0
- package/dist/src/shared/client.d.ts +55 -4
- package/dist/src/shared/sse-events.d.ts +4 -1
- package/dist/src/ui/components/Button.d.ts +2 -2
- package/dist/src/ui/components/CodeBlock.d.ts +3 -0
- package/dist/src/ui/components/CodeEditor.d.ts +5 -0
- package/dist/src/ui/components/CookieCard.d.ts +7 -0
- package/dist/src/ui/components/CopyRequestDropdown.d.ts +7 -0
- package/dist/src/ui/components/DropdownMenu.d.ts +27 -0
- package/dist/src/ui/components/FilterBar.d.ts +10 -0
- package/dist/src/ui/components/JsonTreeCopyableItem.d.ts +1 -1
- package/dist/src/ui/components/KeyValueGrid.d.ts +13 -0
- package/dist/src/ui/components/OverrideResponse.d.ts +8 -0
- package/dist/src/ui/components/RequestBody.d.ts +6 -0
- package/dist/src/ui/components/RequestList.d.ts +9 -4
- package/dist/src/ui/components/ScrollArea.d.ts +3 -2
- package/dist/src/ui/components/Section.d.ts +8 -0
- package/dist/src/ui/components/Separator.d.ts +2 -1
- package/dist/src/ui/components/Tabs.d.ts +7 -0
- package/dist/src/ui/state/hooks.d.ts +4 -0
- package/dist/src/ui/state/model.d.ts +22 -7
- package/dist/src/ui/state/store.d.ts +27 -3
- package/dist/src/ui/utils/checkRequestBodyBinary.d.ts +2 -0
- package/dist/src/ui/utils/escapeShellArg.d.ts +1 -0
- package/dist/src/ui/utils/generateCurlCommand.d.ts +2 -0
- package/dist/src/ui/utils/generateFetchCall.d.ts +2 -0
- package/dist/src/ui/utils/generateMultipartBody.d.ts +4 -0
- package/dist/src/utils/applyReactNativeRequestHeadersLogic.d.ts +7 -0
- package/dist/src/utils/applyReactNativeResponseHeadersLogic.d.ts +9 -0
- package/dist/src/utils/cookieParser.d.ts +6 -0
- package/dist/src/utils/getContentTypeMimeType.d.ts +2 -0
- package/dist/src/utils/getHttpHeader.d.ts +5 -0
- package/dist/src/utils/getHttpHeaderValueAsString.d.ts +11 -0
- package/dist/src/utils/getStringSizeInBytes.d.ts +1 -0
- package/dist/src/utils/inferContentTypeFromPostData.d.ts +2 -0
- package/dist/src/utils/safeStringify.d.ts +1 -0
- package/dist/src/utils/typeChecks.d.ts +9 -0
- package/dist/useNetworkActivityDevTools.cjs +337 -24
- package/dist/useNetworkActivityDevTools.js +338 -25
- package/package.json +7 -4
- package/react-native.ts +6 -1
- package/src/react-native/config.ts +43 -0
- package/src/react-native/http/network-inspector.ts +190 -8
- package/src/react-native/http/overrides-registry.ts +32 -0
- package/src/react-native/http/xhr-interceptor.ts +19 -2
- package/src/react-native/sse/sse-inspector.ts +27 -5
- package/src/react-native/sse/sse-interceptor.ts +26 -8
- package/src/react-native/useNetworkActivityDevTools.ts +86 -8
- package/src/react-native/utils/getBlobName.ts +45 -0
- package/src/react-native/utils/getFormDataEntries.ts +32 -0
- package/src/react-native/utils.ts +3 -3
- package/src/shared/client.ts +81 -4
- package/src/shared/sse-events.ts +4 -1
- package/src/ui/components/Button.tsx +1 -0
- package/src/ui/components/CodeBlock.tsx +19 -0
- package/src/ui/components/CodeEditor.tsx +26 -0
- package/src/ui/components/CookieCard.tsx +64 -0
- package/src/ui/components/CopyRequestDropdown.tsx +95 -0
- package/src/ui/components/DropdownMenu.tsx +206 -0
- package/src/ui/components/FilterBar.tsx +117 -0
- package/src/ui/components/Input.tsx +1 -1
- package/src/ui/components/JsonTree.tsx +10 -3
- package/src/ui/components/JsonTreeCopyableItem.tsx +14 -10
- package/src/ui/components/KeyValueGrid.tsx +51 -0
- package/src/ui/components/OverrideResponse.tsx +132 -0
- package/src/ui/components/RequestBody.tsx +86 -0
- package/src/ui/components/RequestList.tsx +74 -14
- package/src/ui/components/ScrollArea.tsx +1 -0
- package/src/ui/components/Section.tsx +46 -0
- package/src/ui/components/SidePanel.tsx +15 -5
- package/src/ui/components/Toolbar.tsx +3 -2
- package/src/ui/globals.css +4 -0
- package/src/ui/hooks/useCopyToClipboard.ts +2 -2
- package/src/ui/state/derived.ts +2 -0
- package/src/ui/state/hooks.ts +8 -0
- package/src/ui/state/model.ts +28 -7
- package/src/ui/state/store.ts +640 -500
- package/src/ui/tabs/CookiesTab.tsx +60 -263
- package/src/ui/tabs/HeadersTab.tsx +78 -89
- package/src/ui/tabs/RequestTab.tsx +58 -46
- package/src/ui/tabs/ResponseTab.tsx +98 -67
- package/src/ui/tabs/SSEMessagesTab.tsx +50 -39
- package/src/ui/utils/checkRequestBodyBinary.ts +7 -0
- package/src/ui/utils/escapeShellArg.ts +12 -0
- package/src/ui/utils/generateCurlCommand.ts +83 -0
- package/src/ui/utils/generateFetchCall.ts +64 -0
- package/src/ui/utils/generateMultipartBody.ts +19 -0
- package/src/ui/views/InspectorView.tsx +15 -3
- package/src/utils/applyReactNativeRequestHeadersLogic.ts +30 -0
- package/src/utils/applyReactNativeResponseHeadersLogic.ts +28 -0
- package/src/utils/cookieParser.ts +126 -0
- package/src/utils/getContentTypeMimeType.ts +17 -0
- package/src/utils/getHttpHeader.ts +17 -0
- package/src/utils/getHttpHeaderValueAsString.ts +13 -0
- package/src/utils/getStringSizeInBytes.ts +3 -0
- package/src/utils/inferContentTypeFromPostData.ts +9 -0
- package/src/utils/safeStringify.ts +7 -0
- package/src/utils/typeChecks.ts +27 -0
- package/dist/src/ui/utils/getHttpHeaderValue.d.ts +0 -2
- package/src/ui/utils/getHttpHeaderValue.ts +0 -14
package/dist/react-native.cjs
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
exports.useNetworkActivityDevTools = void 0;
|
|
4
|
-
|
|
4
|
+
const isWeb = typeof window !== "undefined" && window.navigator.product !== "ReactNative";
|
|
5
|
+
const isDev = process.env.NODE_ENV !== "production";
|
|
6
|
+
const isServer = typeof window === "undefined";
|
|
7
|
+
if (isDev && !isWeb && !isServer) {
|
|
5
8
|
exports.useNetworkActivityDevTools = require("./useNetworkActivityDevTools.cjs").useNetworkActivityDevTools;
|
|
6
9
|
} else {
|
|
7
10
|
exports.useNetworkActivityDevTools = () => null;
|
package/dist/react-native.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
let useNetworkActivityDevTools;
|
|
2
|
-
|
|
2
|
+
const isWeb = typeof window !== "undefined" && window.navigator.product !== "ReactNative";
|
|
3
|
+
const isDev = process.env.NODE_ENV !== "production";
|
|
4
|
+
const isServer = typeof window === "undefined";
|
|
5
|
+
if (isDev && !isWeb && !isServer) {
|
|
3
6
|
useNetworkActivityDevTools = require("./useNetworkActivityDevTools.js").useNetworkActivityDevTools;
|
|
4
7
|
} else {
|
|
5
8
|
useNetworkActivityDevTools = () => null;
|
package/dist/rozenite.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@rozenite/network-activity-plugin","version":"1.0.0
|
|
1
|
+
{"name":"@rozenite/network-activity-plugin","version":"1.0.0","description":"Network Activity for Rozenite.","panels":[{"name":"Network Activity","source":"/App.html"}]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type InspectorType = 'http' | 'websocket' | 'sse';
|
|
2
|
+
export type NetworkActivityDevToolsConfig = {
|
|
3
|
+
/**
|
|
4
|
+
* Specifies which network inspectors are enabled.
|
|
5
|
+
* Set to `false` to disable monitoring for a specific type of network traffic.
|
|
6
|
+
* @default { http: true, websocket: true, sse: true }
|
|
7
|
+
*/
|
|
8
|
+
inspectors?: {
|
|
9
|
+
[key in InspectorType]?: boolean;
|
|
10
|
+
};
|
|
11
|
+
clientUISettings?: {
|
|
12
|
+
/**
|
|
13
|
+
* If true, display the entire relative URL as the request name in the UI instead of only the last path segment.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
showUrlAsName?: boolean;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export declare const DEFAULT_CONFIG: NetworkActivityDevToolsConfig;
|
|
20
|
+
export declare const validateConfig: (config: NetworkActivityDevToolsConfig) => void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RequestOverride } from '../../shared/client';
|
|
2
|
+
export type OverridesRegistry = {
|
|
3
|
+
setOverrides: (newOverrides: [string, RequestOverride][]) => void;
|
|
4
|
+
getOverrideForUrl: (url: string) => RequestOverride | undefined;
|
|
5
|
+
};
|
|
6
|
+
export declare const getOverridesRegistry: () => OverridesRegistry;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { XHRPostData } from '../../shared/client';
|
|
1
2
|
type XHRInterceptorOpenCallback = (method: string, url: string, request: XMLHttpRequest) => void;
|
|
2
|
-
type XHRInterceptorSendCallback = (data:
|
|
3
|
+
type XHRInterceptorSendCallback = (data: XHRPostData, request: XMLHttpRequest) => void;
|
|
3
4
|
type XHRInterceptorRequestHeaderCallback = (header: string, value: string, request: XMLHttpRequest) => void;
|
|
4
5
|
type XHRInterceptorHeaderReceivedCallback = (responseContentType: string | undefined, responseSize: number | undefined, allHeaders: string, request: XMLHttpRequest) => void;
|
|
5
6
|
type XHRInterceptorResponseCallback = (status: number, timeout: number, response: string, responseURL: string, responseType: string, request: XMLHttpRequest) => void;
|
|
7
|
+
type XHRInterceptorOverrideCallback = (request: XMLHttpRequest) => void;
|
|
6
8
|
/**
|
|
7
9
|
* A network interceptor which monkey-patches XMLHttpRequest methods
|
|
8
10
|
* to gather all network requests/responses, in order to show their
|
|
@@ -31,6 +33,10 @@ export declare const XHRInterceptor: {
|
|
|
31
33
|
* Invoked before XMLHttpRequest.setRequestHeader(...) is called.
|
|
32
34
|
*/
|
|
33
35
|
setRequestHeaderCallback(callback: XHRInterceptorRequestHeaderCallback): void;
|
|
36
|
+
/**
|
|
37
|
+
* Invoked before XMLHttpRequest.send(...) is called.
|
|
38
|
+
*/
|
|
39
|
+
setOverrideCallback(callback: XHRInterceptorOverrideCallback): void;
|
|
34
40
|
isInterceptorEnabled(): boolean;
|
|
35
41
|
enableInterception(): void;
|
|
36
42
|
disableInterception(): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { default as EventSource, MessageEvent, ErrorEvent, OpenEvent, CloseEvent, TimeoutEvent, ExceptionEvent } from 'react-native-sse';
|
|
1
|
+
import { default as EventSource, MessageEvent, ErrorEvent, OpenEvent, CloseEvent, TimeoutEvent, ExceptionEvent, CustomEvent } from 'react-native-sse';
|
|
2
2
|
export type SSEInterceptorConnectCallback = (url: string, request: EventSource) => void;
|
|
3
|
-
export type SSEInterceptorMessageCallback = (event: MessageEvent
|
|
3
|
+
export type SSEInterceptorMessageCallback = (event: MessageEvent | CustomEvent<string>, request: EventSource) => void;
|
|
4
4
|
export type SSEInterceptorErrorCallback = (error: ErrorEvent | TimeoutEvent | ExceptionEvent, request: EventSource) => void;
|
|
5
5
|
export type SSEInterceptorOpenEventCallback = (event: OpenEvent, request: EventSource) => void;
|
|
6
6
|
export type SSEInterceptorCloseCallback = (event: CloseEvent, request: EventSource) => void;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { NetworkActivityEventMap } from '../shared/client';
|
|
2
|
-
|
|
2
|
+
import { NetworkActivityDevToolsConfig } from './config';
|
|
3
|
+
export declare const useNetworkActivityDevTools: (config?: NetworkActivityDevToolsConfig) => import('@rozenite/plugin-bridge').RozeniteDevToolsClient<NetworkActivityEventMap> | null;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility function to get the name of a blob. Handles both the direct name property and the data object.
|
|
3
|
+
*
|
|
4
|
+
* ```
|
|
5
|
+
* // node_modules/react-native/Libraries/Blob/Blob.js
|
|
6
|
+
*
|
|
7
|
+
* export type BlobData = {
|
|
8
|
+
* blobId: string,
|
|
9
|
+
* offset: number,
|
|
10
|
+
* size: number,
|
|
11
|
+
* name?: string,
|
|
12
|
+
* type?: string,
|
|
13
|
+
* lastModified?: number,
|
|
14
|
+
* __collector?: ?BlobCollector,
|
|
15
|
+
* ...
|
|
16
|
+
* };
|
|
17
|
+
*
|
|
18
|
+
* get data(): BlobData {
|
|
19
|
+
* if (!this._data) {
|
|
20
|
+
* throw new Error('Blob has been closed and is no longer available');
|
|
21
|
+
* }
|
|
22
|
+
*
|
|
23
|
+
* return this._data;
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* get size(): number {
|
|
27
|
+
* return this.data.size;
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* get type(): string {
|
|
31
|
+
* return this.data.type || '';
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function getBlobName(blob: any): string | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extracts form data parts from a FormData object.
|
|
3
|
+
* Handles both the standard FormData API and the React Native FormData format.
|
|
4
|
+
*
|
|
5
|
+
* ```
|
|
6
|
+
* // node_modules/react-native/Libraries/Network/FormData.js
|
|
7
|
+
*
|
|
8
|
+
* class FormData {
|
|
9
|
+
* _parts: Array<FormDataNameValuePair>;
|
|
10
|
+
*
|
|
11
|
+
* constructor() {
|
|
12
|
+
* this._parts = [];
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* ...
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function getFormDataEntries(formData: any): [string, unknown][];
|
|
@@ -1,15 +1,45 @@
|
|
|
1
1
|
import { RozeniteDevToolsClient } from '@rozenite/plugin-bridge';
|
|
2
2
|
import { WebSocketEventMap } from './websocket-events';
|
|
3
3
|
import { SSEEventMap } from './sse-events';
|
|
4
|
-
export type HttpHeaders = Record<string, string>;
|
|
4
|
+
export type HttpHeaders = Record<string, string | string[]>;
|
|
5
|
+
export type XHRHeaders = NonNullable<XMLHttpRequest['responseHeaders']>;
|
|
5
6
|
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
|
|
6
7
|
export type RequestId = string;
|
|
7
8
|
export type Timestamp = number;
|
|
9
|
+
export type XHRPostData = string | Blob | FormData | ArrayBuffer | ArrayBufferView | unknown | null | undefined;
|
|
10
|
+
export type RequestTextPostData = {
|
|
11
|
+
type: 'text';
|
|
12
|
+
value: string;
|
|
13
|
+
};
|
|
14
|
+
export type RequestBinaryPostData = {
|
|
15
|
+
type: 'binary';
|
|
16
|
+
value: {
|
|
17
|
+
size: number;
|
|
18
|
+
type?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type RequestFormDataPostData = {
|
|
23
|
+
type: 'form-data';
|
|
24
|
+
value: Record<string, RequestTextPostData | RequestBinaryPostData>;
|
|
25
|
+
};
|
|
26
|
+
export type RequestPostData = RequestTextPostData | RequestFormDataPostData | RequestBinaryPostData | null | undefined;
|
|
27
|
+
export type Cookie = {
|
|
28
|
+
name: string;
|
|
29
|
+
value: string;
|
|
30
|
+
domain?: string;
|
|
31
|
+
path?: string;
|
|
32
|
+
expires?: string;
|
|
33
|
+
maxAge?: string;
|
|
34
|
+
secure?: boolean;
|
|
35
|
+
httpOnly?: boolean;
|
|
36
|
+
sameSite?: string;
|
|
37
|
+
};
|
|
8
38
|
export type Request = {
|
|
9
39
|
url: string;
|
|
10
40
|
method: HttpMethod;
|
|
11
41
|
headers: HttpHeaders;
|
|
12
|
-
postData?:
|
|
42
|
+
postData?: RequestPostData;
|
|
13
43
|
};
|
|
14
44
|
export type Response = {
|
|
15
45
|
url: string;
|
|
@@ -17,7 +47,7 @@ export type Response = {
|
|
|
17
47
|
statusText: string;
|
|
18
48
|
headers: HttpHeaders;
|
|
19
49
|
contentType: string;
|
|
20
|
-
size: number;
|
|
50
|
+
size: number | null;
|
|
21
51
|
responseTime: Timestamp;
|
|
22
52
|
};
|
|
23
53
|
export type Initiator = {
|
|
@@ -27,9 +57,20 @@ export type Initiator = {
|
|
|
27
57
|
columnNumber?: number;
|
|
28
58
|
};
|
|
29
59
|
export type ResourceType = 'XHR' | 'Fetch' | 'Other';
|
|
60
|
+
export type RequestOverride = {
|
|
61
|
+
status?: number;
|
|
62
|
+
body?: string;
|
|
63
|
+
};
|
|
64
|
+
export type NetworkActivityClientUISettings = {
|
|
65
|
+
showUrlAsName?: boolean;
|
|
66
|
+
};
|
|
30
67
|
export type NetworkActivityEventMap = {
|
|
31
68
|
'network-enable': unknown;
|
|
32
69
|
'network-disable': unknown;
|
|
70
|
+
'get-client-ui-settings': unknown;
|
|
71
|
+
'client-ui-settings': {
|
|
72
|
+
settings?: NetworkActivityClientUISettings;
|
|
73
|
+
};
|
|
33
74
|
'request-sent': {
|
|
34
75
|
requestId: RequestId;
|
|
35
76
|
request: Request;
|
|
@@ -47,7 +88,7 @@ export type NetworkActivityEventMap = {
|
|
|
47
88
|
requestId: RequestId;
|
|
48
89
|
timestamp: Timestamp;
|
|
49
90
|
duration: number;
|
|
50
|
-
size: number;
|
|
91
|
+
size: number | null;
|
|
51
92
|
ttfb: number;
|
|
52
93
|
};
|
|
53
94
|
'request-failed': {
|
|
@@ -57,6 +98,13 @@ export type NetworkActivityEventMap = {
|
|
|
57
98
|
error: string;
|
|
58
99
|
canceled: boolean;
|
|
59
100
|
};
|
|
101
|
+
'request-progress': {
|
|
102
|
+
requestId: RequestId;
|
|
103
|
+
timestamp: Timestamp;
|
|
104
|
+
loaded: number;
|
|
105
|
+
total: number;
|
|
106
|
+
lengthComputable: boolean;
|
|
107
|
+
};
|
|
60
108
|
'get-response-body': {
|
|
61
109
|
requestId: RequestId;
|
|
62
110
|
};
|
|
@@ -64,5 +112,8 @@ export type NetworkActivityEventMap = {
|
|
|
64
112
|
requestId: RequestId;
|
|
65
113
|
body: string | null;
|
|
66
114
|
};
|
|
115
|
+
'set-overrides': {
|
|
116
|
+
overrides: [string, RequestOverride][];
|
|
117
|
+
};
|
|
67
118
|
} & WebSocketEventMap & SSEEventMap;
|
|
68
119
|
export type NetworkActivityDevToolsClient = RozeniteDevToolsClient<NetworkActivityEventMap>;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { VariantProps } from 'class-variance-authority';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
declare const buttonVariants: (props?: ({
|
|
4
|
-
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" |
|
|
5
|
-
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
4
|
+
variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
|
|
5
|
+
size?: "default" | "xs" | "sm" | "lg" | "icon" | null | undefined;
|
|
6
6
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
7
7
|
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
8
8
|
asChild?: boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { HttpNetworkEntry, SSENetworkEntry } from '../state/model';
|
|
2
|
+
type NetworkEntry = HttpNetworkEntry | SSENetworkEntry;
|
|
3
|
+
type CopyDropdownProps = {
|
|
4
|
+
selectedRequest: NetworkEntry;
|
|
5
|
+
};
|
|
6
|
+
export declare const CopyRequestDropdown: ({ selectedRequest }: CopyDropdownProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
|
|
3
|
+
declare const DropdownMenu: React.FC<DropdownMenuPrimitive.DropdownMenuProps>;
|
|
4
|
+
declare const DropdownMenuTrigger: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
5
|
+
declare const DropdownMenuGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
6
|
+
declare const DropdownMenuPortal: React.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
|
|
7
|
+
declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
|
|
8
|
+
declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
10
|
+
inset?: boolean;
|
|
11
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
|
+
declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
14
|
+
declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
15
|
+
inset?: boolean;
|
|
16
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
+
declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
18
|
+
declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
19
|
+
declare const DropdownMenuLabel: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
20
|
+
inset?: boolean;
|
|
21
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
22
|
+
declare const DropdownMenuSeparator: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
23
|
+
declare const DropdownMenuShortcut: {
|
|
24
|
+
({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
displayName: string;
|
|
26
|
+
};
|
|
27
|
+
export { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuRadioGroup, };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type FilterState = {
|
|
2
|
+
text: string;
|
|
3
|
+
types: Set<'http' | 'websocket' | 'sse'>;
|
|
4
|
+
};
|
|
5
|
+
type FilterBarProps = {
|
|
6
|
+
filter: FilterState;
|
|
7
|
+
onFilterChange: (filter: FilterState) => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const FilterBar: ({ filter, onFilterChange }: FilterBarProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -3,5 +3,5 @@ type JsonTreeCopyableItemProps = PropsWithChildren<{
|
|
|
3
3
|
getCopyableValue: () => string;
|
|
4
4
|
className?: string;
|
|
5
5
|
}>;
|
|
6
|
-
export declare const JsonTreeCopyableItem: ({ children, getCopyableValue, className }: JsonTreeCopyableItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare const JsonTreeCopyableItem: ({ children, getCopyableValue, className, }: JsonTreeCopyableItemProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export {};
|
|
@@ -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;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProcessedRequest } from '../state/model';
|
|
2
|
-
import { RequestId } from '../../shared/client';
|
|
2
|
+
import { RequestId, RequestOverride } from '../../shared/client';
|
|
3
|
+
import { FilterState } from './FilterBar';
|
|
3
4
|
type NetworkRequest = {
|
|
4
5
|
id: RequestId;
|
|
5
6
|
name: string;
|
|
@@ -11,6 +12,7 @@ type NetworkRequest = {
|
|
|
11
12
|
time: string;
|
|
12
13
|
type: string;
|
|
13
14
|
startTime: string;
|
|
15
|
+
hasOverride: boolean;
|
|
14
16
|
};
|
|
15
17
|
declare const formatSize: (bytes: number) => string;
|
|
16
18
|
declare const formatDuration: (duration: number) => string;
|
|
@@ -19,7 +21,10 @@ declare const extractDomainAndPath: (url: string) => {
|
|
|
19
21
|
domain: string;
|
|
20
22
|
path: string;
|
|
21
23
|
};
|
|
22
|
-
declare const generateName: (url: string) => string;
|
|
23
|
-
declare const processNetworkRequests: (processedRequests: ProcessedRequest[]) => NetworkRequest[];
|
|
24
|
-
export
|
|
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;
|
|
25
30
|
export { formatSize, formatDuration, formatStartTime, extractDomainAndPath, generateName, processNetworkRequests, };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
|
|
3
|
-
declare const
|
|
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
|
-
|
|
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,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 };
|
|
@@ -9,9 +9,13 @@ export declare const useNetworkActivityActions: () => {
|
|
|
9
9
|
setRecording: (isRecording: boolean) => void;
|
|
10
10
|
setSelectedRequest: (requestId: import('../../shared/client').RequestId | null) => void;
|
|
11
11
|
clearRequests: () => void;
|
|
12
|
+
addOverride: (requestUrl: string, override: import('../../shared/client').RequestOverride) => void;
|
|
13
|
+
clearOverride: (requestUrl: string) => void;
|
|
12
14
|
};
|
|
13
15
|
export declare const useNetworkActivityClientManagement: () => {
|
|
14
16
|
setupClient: (client: import('../../shared/client').NetworkActivityDevToolsClient) => void;
|
|
15
17
|
cleanupClient: () => void;
|
|
16
18
|
};
|
|
17
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;
|
|
@@ -1,28 +1,32 @@
|
|
|
1
|
-
import { Initiator, ResourceType } from '../../shared/client';
|
|
1
|
+
import { Initiator, ResourceType, HttpHeaders, RequestPostData } from '../../shared/client';
|
|
2
2
|
export type RequestId = string;
|
|
3
3
|
export type Timestamp = number;
|
|
4
4
|
export type SocketId = number;
|
|
5
5
|
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
|
|
6
6
|
export type NetworkEntryType = 'http' | 'websocket' | 'sse';
|
|
7
|
-
export type
|
|
7
|
+
export type HttpRequestData = {
|
|
8
|
+
type: string;
|
|
9
|
+
data: NonNullable<RequestPostData>;
|
|
10
|
+
};
|
|
11
|
+
export type HttpResponseData = {
|
|
8
12
|
type: string;
|
|
9
13
|
data: string;
|
|
10
14
|
};
|
|
11
15
|
export type HttpRequest = {
|
|
12
16
|
url: string;
|
|
13
17
|
method: HttpMethod;
|
|
14
|
-
headers:
|
|
15
|
-
body?:
|
|
18
|
+
headers: HttpHeaders;
|
|
19
|
+
body?: HttpRequestData;
|
|
16
20
|
};
|
|
17
21
|
export type HttpResponse = {
|
|
18
22
|
url: string;
|
|
19
23
|
status: number;
|
|
20
24
|
statusText: string;
|
|
21
|
-
headers:
|
|
25
|
+
headers: HttpHeaders;
|
|
22
26
|
contentType: string;
|
|
23
27
|
size: number;
|
|
24
28
|
responseTime: Timestamp;
|
|
25
|
-
body?:
|
|
29
|
+
body?: HttpResponseData;
|
|
26
30
|
};
|
|
27
31
|
export type HttpStatus = 'pending' | 'loading' | 'finished' | 'failed';
|
|
28
32
|
export type HttpNetworkEntry = {
|
|
@@ -39,9 +43,15 @@ export type HttpNetworkEntry = {
|
|
|
39
43
|
size?: number;
|
|
40
44
|
initiator?: Initiator;
|
|
41
45
|
resourceType?: ResourceType;
|
|
46
|
+
progress?: {
|
|
47
|
+
loaded: number;
|
|
48
|
+
total: number;
|
|
49
|
+
lengthComputable: boolean;
|
|
50
|
+
};
|
|
42
51
|
};
|
|
43
52
|
export type SSEMessage = {
|
|
44
53
|
id: string;
|
|
54
|
+
type: string;
|
|
45
55
|
data: string;
|
|
46
56
|
timestamp: Timestamp;
|
|
47
57
|
};
|
|
@@ -92,7 +102,12 @@ export type ProcessedRequest = {
|
|
|
92
102
|
status: HttpStatus | WebSocketStatus | SSEStatus;
|
|
93
103
|
timestamp: Timestamp;
|
|
94
104
|
duration?: number;
|
|
95
|
-
size
|
|
105
|
+
size: number | null;
|
|
96
106
|
method: HttpMethod | 'WS' | 'SSE';
|
|
97
107
|
httpStatus?: number;
|
|
108
|
+
progress?: {
|
|
109
|
+
loaded: number;
|
|
110
|
+
total: number;
|
|
111
|
+
lengthComputable: boolean;
|
|
112
|
+
};
|
|
98
113
|
};
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { NetworkActivityDevToolsClient, NetworkActivityEventMap, RequestId } from '../../shared/client';
|
|
1
|
+
import { NetworkActivityDevToolsClient, NetworkActivityEventMap, RequestOverride, RequestId, NetworkActivityClientUISettings } from '../../shared/client';
|
|
2
2
|
import { NetworkEntry, WebSocketMessage } from './model';
|
|
3
3
|
export interface NetworkActivityState {
|
|
4
4
|
isRecording: boolean;
|
|
5
5
|
selectedRequestId: RequestId | null;
|
|
6
6
|
networkEntries: Map<RequestId, NetworkEntry>;
|
|
7
7
|
websocketMessages: Map<RequestId, WebSocketMessage[]>;
|
|
8
|
+
overrides: Map<string, RequestOverride>;
|
|
9
|
+
clientUISettings: NetworkActivityClientUISettings | null;
|
|
8
10
|
_unsubscribeFunctions?: Array<{
|
|
9
11
|
remove: () => void;
|
|
10
12
|
}>;
|
|
@@ -13,6 +15,8 @@ export interface NetworkActivityState {
|
|
|
13
15
|
setRecording: (isRecording: boolean) => void;
|
|
14
16
|
setSelectedRequest: (requestId: RequestId | null) => void;
|
|
15
17
|
clearRequests: () => void;
|
|
18
|
+
addOverride: (requestUrl: string, override: RequestOverride) => void;
|
|
19
|
+
clearOverride: (requestUrl: string) => void;
|
|
16
20
|
};
|
|
17
21
|
handleEvent: <K extends keyof NetworkActivityEventMap>(eventType: K, data: NetworkActivityEventMap[K]) => void;
|
|
18
22
|
client: {
|
|
@@ -20,5 +24,25 @@ export interface NetworkActivityState {
|
|
|
20
24
|
cleanupClient: () => void;
|
|
21
25
|
};
|
|
22
26
|
}
|
|
23
|
-
export declare const createNetworkActivityStore: () => import('zustand').StoreApi<NetworkActivityState
|
|
24
|
-
|
|
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
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function escapeShellArg(arg: 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;
|