@rozenite/network-activity-plugin 1.0.0-alpha.1 → 1.0.0-alpha.10
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 +3 -5
- package/dist/{panel.html → App.html} +3 -3
- package/dist/assets/App-CA1Fbh0I.js +25364 -0
- package/dist/assets/App-DoHQsY5s.css +1276 -0
- package/dist/event-source.cjs +22 -0
- package/dist/event-source.js +23 -0
- package/dist/react-native.cjs +8 -1
- package/dist/react-native.d.ts +1 -5
- package/dist/react-native.js +6 -171
- package/dist/rozenite.config.d.ts +7 -0
- package/dist/rozenite.json +1 -1
- package/dist/src/react-native/http/network-inspector.d.ts +8 -0
- package/dist/src/react-native/http/network-requests-registry.d.ts +6 -0
- package/dist/src/react-native/http/xhr-interceptor.d.ts +38 -0
- package/dist/src/react-native/sse/event-source.d.ts +2 -0
- package/dist/src/react-native/sse/sse-inspector.d.ts +9 -0
- package/dist/src/react-native/sse/sse-interceptor.d.ts +36 -0
- package/dist/src/react-native/sse/types.d.ts +6 -0
- package/dist/src/react-native/useNetworkActivityDevTools.d.ts +2 -0
- package/dist/src/react-native/utils.d.ts +6 -0
- package/dist/src/react-native/websocket/websocket-inspector.d.ts +9 -0
- package/dist/src/react-native/websocket/websocket-interceptor.d.ts +74 -0
- package/dist/src/shared/client.d.ts +68 -0
- package/dist/src/shared/sse-events.d.ts +35 -0
- package/dist/src/shared/websocket-events.d.ts +60 -0
- package/dist/src/ui/App.d.ts +1 -0
- package/dist/src/ui/components/Badge.d.ts +9 -0
- package/dist/src/ui/components/Button.d.ts +11 -0
- package/dist/src/ui/components/Input.d.ts +3 -0
- package/dist/src/ui/components/JsonTree.d.ts +5 -0
- package/dist/src/ui/components/JsonTreeCopyableItem.d.ts +7 -0
- package/dist/src/ui/components/RequestList.d.ts +25 -0
- package/dist/src/ui/components/ScrollArea.d.ts +4 -0
- package/dist/src/ui/components/Separator.d.ts +3 -0
- package/dist/src/ui/components/SidePanel.d.ts +1 -0
- package/dist/src/ui/components/Toolbar.d.ts +1 -0
- package/dist/src/ui/hooks/useCopyToClipboard.d.ts +4 -0
- package/dist/src/ui/state/derived.d.ts +5 -0
- package/dist/src/ui/state/hooks.d.ts +17 -0
- package/dist/src/ui/state/model.d.ts +98 -0
- package/dist/src/ui/state/store.d.ts +24 -0
- package/dist/src/ui/tabs/CookiesTab.d.ts +5 -0
- package/dist/src/ui/tabs/HeadersTab.d.ts +5 -0
- package/dist/src/ui/tabs/MessagesTab.d.ts +5 -0
- package/dist/src/ui/tabs/RequestTab.d.ts +5 -0
- package/dist/src/ui/tabs/ResponseTab.d.ts +6 -0
- package/dist/src/ui/tabs/SSEMessagesTab.d.ts +5 -0
- package/dist/src/ui/tabs/TimingTab.d.ts +5 -0
- package/dist/src/ui/types.d.ts +26 -0
- package/dist/src/ui/utils/assert.d.ts +1 -0
- package/dist/src/ui/utils/cn.d.ts +2 -0
- package/dist/src/ui/utils/copyToClipboard.d.ts +1 -0
- package/dist/src/ui/utils/getHttpHeaderValue.d.ts +2 -0
- package/dist/src/ui/utils/getId.d.ts +1 -0
- package/dist/src/ui/utils/getStatusColor.d.ts +1 -0
- package/dist/src/ui/views/InspectorView.d.ts +5 -0
- package/dist/src/ui/views/LoadingView.d.ts +1 -0
- package/dist/useNetworkActivityDevTools.cjs +759 -0
- package/dist/useNetworkActivityDevTools.js +757 -0
- package/package.json +31 -10
- package/postcss.config.js +6 -0
- package/project.json +12 -0
- package/react-native.ts +2 -1
- package/rozenite.config.ts +2 -2
- package/src/css-modules.d.ts +1 -1
- package/src/react-native/http/network-inspector.ts +226 -0
- package/src/react-native/http/network-requests-registry.ts +52 -0
- package/src/react-native/http/xhr-interceptor.ts +211 -0
- package/src/react-native/http/xml-request.d.ts +34 -0
- package/src/react-native/sse/event-source.ts +25 -0
- package/src/react-native/sse/sse-inspector.ts +117 -0
- package/src/react-native/sse/sse-interceptor.ts +162 -0
- package/src/react-native/sse/types.ts +9 -0
- package/src/react-native/useNetworkActivityDevTools.ts +73 -210
- package/src/react-native/utils.ts +43 -0
- package/src/react-native/websocket/websocket-inspector.ts +180 -0
- package/src/react-native/websocket/websocket-interceptor.d.ts +4 -0
- package/src/react-native/websocket/websocket-interceptor.ts +166 -0
- package/src/shared/client.ts +86 -0
- package/src/shared/sse-events.ts +44 -0
- package/src/shared/websocket-events.ts +79 -0
- package/src/ui/App.tsx +19 -0
- package/src/ui/components/Badge.tsx +36 -0
- package/src/ui/components/Button.tsx +56 -0
- package/src/ui/components/Input.tsx +22 -0
- package/src/ui/components/JsonTree.tsx +50 -0
- package/src/ui/components/JsonTreeCopyableItem.tsx +33 -0
- package/src/ui/components/RequestList.tsx +295 -0
- package/src/ui/components/ScrollArea.tsx +48 -0
- package/src/ui/components/Separator.tsx +31 -0
- package/src/ui/components/SidePanel.tsx +323 -0
- package/src/ui/components/Tabs.tsx +55 -0
- package/src/ui/components/Toolbar.tsx +45 -0
- package/src/ui/globals.css +90 -0
- package/src/ui/hooks/useCopyToClipboard.ts +28 -0
- package/src/ui/state/derived.ts +112 -0
- package/src/ui/state/hooks.ts +44 -0
- package/src/ui/state/model.ts +129 -0
- package/src/ui/state/store.ts +559 -0
- package/src/ui/tabs/CookiesTab.tsx +279 -0
- package/src/ui/tabs/HeadersTab.tsx +110 -0
- package/src/ui/tabs/MessagesTab.tsx +276 -0
- package/src/ui/tabs/RequestTab.tsx +69 -0
- package/src/ui/tabs/ResponseTab.tsx +138 -0
- package/src/ui/tabs/SSEMessagesTab.tsx +213 -0
- package/src/ui/tabs/TimingTab.tsx +60 -0
- package/src/ui/types.ts +34 -0
- package/src/ui/utils/assert.ts +5 -0
- package/src/ui/utils/cn.ts +6 -0
- package/src/ui/utils/copyToClipboard.ts +3 -0
- package/src/ui/utils/getHttpHeaderValue.ts +14 -0
- package/src/ui/utils/getId.ts +10 -0
- package/src/ui/utils/getStatusColor.ts +15 -0
- package/src/ui/views/InspectorView.tsx +53 -0
- package/src/ui/views/LoadingView.tsx +19 -0
- package/tailwind.config.ts +96 -0
- package/tsconfig.json +13 -6
- package/tsconfig.tsbuildinfo +1 -0
- package/vite.config.ts +13 -1
- package/dist/assets/panel-C5YgUUj5.js +0 -54
- package/dist/assets/panel-NCVczPb1.css +0 -1
- package/src/types/network.ts +0 -153
- package/src/ui/components.module.css +0 -158
- package/src/ui/components.tsx +0 -219
- package/src/ui/network-details.module.css +0 -57
- package/src/ui/network-details.tsx +0 -134
- package/src/ui/network-list.module.css +0 -122
- package/src/ui/network-list.tsx +0 -145
- package/src/ui/network-toolbar.module.css +0 -9
- package/src/ui/network-toolbar.tsx +0 -40
- package/src/ui/panel.module.css +0 -61
- package/src/ui/panel.tsx +0 -201
- package/src/ui/tanstack-query.tsx +0 -197
- package/src/ui/utils.ts +0 -89
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const NOOP = () => {
|
|
3
|
+
};
|
|
4
|
+
const MOCK_EVENT_SOURCE = class {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.open = NOOP;
|
|
7
|
+
this.close = NOOP;
|
|
8
|
+
this.addEventListener = NOOP;
|
|
9
|
+
this.removeEventListener = NOOP;
|
|
10
|
+
this.dispatch = NOOP;
|
|
11
|
+
this.removeAllEventListeners = NOOP;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const getEventSource = () => {
|
|
15
|
+
try {
|
|
16
|
+
const { default: EventSource } = require("react-native-sse");
|
|
17
|
+
return EventSource;
|
|
18
|
+
} catch {
|
|
19
|
+
return MOCK_EVENT_SOURCE;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.getEventSource = getEventSource;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const NOOP = () => {
|
|
2
|
+
};
|
|
3
|
+
const MOCK_EVENT_SOURCE = class {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.open = NOOP;
|
|
6
|
+
this.close = NOOP;
|
|
7
|
+
this.addEventListener = NOOP;
|
|
8
|
+
this.removeEventListener = NOOP;
|
|
9
|
+
this.dispatch = NOOP;
|
|
10
|
+
this.removeAllEventListeners = NOOP;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const getEventSource = () => {
|
|
14
|
+
try {
|
|
15
|
+
const { default: EventSource } = require("react-native-sse");
|
|
16
|
+
return EventSource;
|
|
17
|
+
} catch {
|
|
18
|
+
return MOCK_EVENT_SOURCE;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
getEventSource as g
|
|
23
|
+
};
|
package/dist/react-native.cjs
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
exports.useNetworkActivityDevTools = void 0;
|
|
4
|
+
if (process.env.NODE_ENV !== "production") {
|
|
5
|
+
exports.useNetworkActivityDevTools = require("./useNetworkActivityDevTools.cjs").useNetworkActivityDevTools;
|
|
6
|
+
} else {
|
|
7
|
+
exports.useNetworkActivityDevTools = () => null;
|
|
8
|
+
}
|
package/dist/react-native.d.ts
CHANGED
|
@@ -1,5 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare let useNetworkActivityDevTools: useNetworkActivityDevTools_2;
|
|
4
|
-
|
|
5
|
-
export { }
|
|
1
|
+
export declare let useNetworkActivityDevTools: typeof import('./src/react-native/useNetworkActivityDevTools').useNetworkActivityDevTools;
|
package/dist/react-native.js
CHANGED
|
@@ -1,174 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
let useNetworkActivityDevTools;
|
|
2
|
+
if (process.env.NODE_ENV !== "production") {
|
|
3
|
+
useNetworkActivityDevTools = require("./useNetworkActivityDevTools.js").useNetworkActivityDevTools;
|
|
4
|
+
} else {
|
|
5
|
+
useNetworkActivityDevTools = () => null;
|
|
6
6
|
}
|
|
7
|
-
function h(t) {
|
|
8
|
-
if (t instanceof Headers) {
|
|
9
|
-
const e = {};
|
|
10
|
-
return t.forEach((r, o) => {
|
|
11
|
-
e[o] = r;
|
|
12
|
-
}), e;
|
|
13
|
-
} else if (Array.isArray(t)) {
|
|
14
|
-
const e = {};
|
|
15
|
-
return t.forEach(([r, o]) => {
|
|
16
|
-
e[r] = o;
|
|
17
|
-
}), e;
|
|
18
|
-
}
|
|
19
|
-
return t;
|
|
20
|
-
}
|
|
21
|
-
function I(t, e) {
|
|
22
|
-
let r, o, n, s;
|
|
23
|
-
return typeof t == "string" ? (r = t, o = (e == null ? void 0 : e.method) || "GET", n = h((e == null ? void 0 : e.headers) || {}), s = (e == null ? void 0 : e.body) || void 0) : t instanceof Request ? (r = t.url, o = t.method, n = h(t.headers), s = t.body || void 0) : (r = t.toString(), o = (e == null ? void 0 : e.method) || "GET", n = h((e == null ? void 0 : e.headers) || {}), s = (e == null ? void 0 : e.body) || void 0), { url: r, method: o, headers: n, body: s };
|
|
24
|
-
}
|
|
25
|
-
const T = () => {
|
|
26
|
-
const t = S({
|
|
27
|
-
pluginId: "@rozenite/network-activity-plugin"
|
|
28
|
-
});
|
|
29
|
-
return v(() => {
|
|
30
|
-
if (!t)
|
|
31
|
-
return;
|
|
32
|
-
const e = window.fetch.bind(window), r = (o, n) => {
|
|
33
|
-
t.send(o, n);
|
|
34
|
-
};
|
|
35
|
-
return window.fetch = async function(o, n) {
|
|
36
|
-
const s = g(), d = I(o, n), c = Date.now() / 1e3, w = c;
|
|
37
|
-
r("Network.requestWillBeSent", {
|
|
38
|
-
requestId: s,
|
|
39
|
-
loaderId: s,
|
|
40
|
-
documentURL: "",
|
|
41
|
-
request: {
|
|
42
|
-
url: d.url,
|
|
43
|
-
method: d.method,
|
|
44
|
-
headers: d.headers,
|
|
45
|
-
postData: d.body,
|
|
46
|
-
hasPostData: !!d.body
|
|
47
|
-
},
|
|
48
|
-
timestamp: c,
|
|
49
|
-
wallTime: w,
|
|
50
|
-
initiator: {
|
|
51
|
-
type: "script",
|
|
52
|
-
stack: {
|
|
53
|
-
callFrames: [
|
|
54
|
-
{
|
|
55
|
-
functionName: "fetch",
|
|
56
|
-
scriptId: "1",
|
|
57
|
-
url: "",
|
|
58
|
-
lineNumber: 1,
|
|
59
|
-
columnNumber: 1
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
redirectHasExtraInfo: !1,
|
|
65
|
-
redirectResponse: null,
|
|
66
|
-
referrerPolicy: "no-referrer",
|
|
67
|
-
type: "Fetch",
|
|
68
|
-
frameId: "1",
|
|
69
|
-
hasUserGesture: !1
|
|
70
|
-
}), r("Network.requestWillBeSentExtraInfo", {
|
|
71
|
-
requestId: s,
|
|
72
|
-
blockedCookies: [],
|
|
73
|
-
headers: d.headers,
|
|
74
|
-
connectTiming: {
|
|
75
|
-
requestTime: c
|
|
76
|
-
},
|
|
77
|
-
clientSecurityState: {
|
|
78
|
-
initiatorIsSecureContext: !1,
|
|
79
|
-
initiatorIPAddressSpace: "Public",
|
|
80
|
-
privateNetworkRequestPolicy: "Allow"
|
|
81
|
-
},
|
|
82
|
-
siteHasCookieInOtherPartition: !1
|
|
83
|
-
});
|
|
84
|
-
let a;
|
|
85
|
-
try {
|
|
86
|
-
a = await e(o, n);
|
|
87
|
-
const l = {};
|
|
88
|
-
a.headers.forEach((m, y) => {
|
|
89
|
-
l[y] = m;
|
|
90
|
-
});
|
|
91
|
-
const k = a.headers.get("content-type") || "", i = a.headers.get("content-length"), u = i ? parseInt(i, 10) : 0;
|
|
92
|
-
let f = u;
|
|
93
|
-
try {
|
|
94
|
-
f = (await a.clone().arrayBuffer()).byteLength;
|
|
95
|
-
} catch {
|
|
96
|
-
f = u;
|
|
97
|
-
}
|
|
98
|
-
return r("Network.responseReceived", {
|
|
99
|
-
requestId: s,
|
|
100
|
-
loaderId: s,
|
|
101
|
-
timestamp: Date.now() / 1e3,
|
|
102
|
-
type: "Fetch",
|
|
103
|
-
response: {
|
|
104
|
-
url: d.url,
|
|
105
|
-
status: a.status,
|
|
106
|
-
statusText: a.statusText,
|
|
107
|
-
headers: l,
|
|
108
|
-
mimeType: k,
|
|
109
|
-
requestHeaders: d.headers,
|
|
110
|
-
requestHeadersText: void 0,
|
|
111
|
-
connectionReused: !1,
|
|
112
|
-
connectionId: 0,
|
|
113
|
-
remoteIPAddress: void 0,
|
|
114
|
-
remotePort: void 0,
|
|
115
|
-
protocol: void 0,
|
|
116
|
-
securityState: "unknown",
|
|
117
|
-
encodedDataLength: u,
|
|
118
|
-
timing: {
|
|
119
|
-
requestTime: c,
|
|
120
|
-
proxyStart: -1,
|
|
121
|
-
proxyEnd: -1,
|
|
122
|
-
dnsStart: -1,
|
|
123
|
-
dnsEnd: -1,
|
|
124
|
-
connectStart: -1,
|
|
125
|
-
connectEnd: -1,
|
|
126
|
-
sslStart: -1,
|
|
127
|
-
sslEnd: -1,
|
|
128
|
-
workerStart: -1,
|
|
129
|
-
workerReadyStart: -1,
|
|
130
|
-
workerReadyEnd: -1,
|
|
131
|
-
sendStart: c,
|
|
132
|
-
sendEnd: c,
|
|
133
|
-
pushStart: -1,
|
|
134
|
-
pushEnd: -1,
|
|
135
|
-
receiveHeadersEnd: Date.now() / 1e3
|
|
136
|
-
},
|
|
137
|
-
responseTime: Date.now() / 1e3,
|
|
138
|
-
fromDiskCache: !1,
|
|
139
|
-
fromServiceWorker: !1,
|
|
140
|
-
fromPrefetchCache: !1,
|
|
141
|
-
encodedBodySize: u,
|
|
142
|
-
decodedBodySize: f,
|
|
143
|
-
headersText: void 0,
|
|
144
|
-
serviceWorkerResponseSource: void 0,
|
|
145
|
-
responseSource: "network",
|
|
146
|
-
statusCode: a.status
|
|
147
|
-
},
|
|
148
|
-
hasExtraInfo: !1
|
|
149
|
-
}), r("Network.loadingFinished", {
|
|
150
|
-
requestId: s,
|
|
151
|
-
timestamp: Date.now() / 1e3,
|
|
152
|
-
encodedDataLength: u,
|
|
153
|
-
shouldReportCorbBlocking: !1
|
|
154
|
-
}), a;
|
|
155
|
-
} catch (l) {
|
|
156
|
-
throw r("Network.loadingFailed", {
|
|
157
|
-
requestId: s,
|
|
158
|
-
timestamp: Date.now() / 1e3,
|
|
159
|
-
type: "Fetch",
|
|
160
|
-
errorText: l instanceof Error ? l.message : "Unknown error",
|
|
161
|
-
canceled: !1,
|
|
162
|
-
blockedReason: void 0
|
|
163
|
-
}), l;
|
|
164
|
-
}
|
|
165
|
-
}, () => {
|
|
166
|
-
window.fetch = e;
|
|
167
|
-
};
|
|
168
|
-
}, [t]), t;
|
|
169
|
-
};
|
|
170
|
-
let p;
|
|
171
|
-
process.env.NODE_ENV !== "production" ? p = T : p = () => null;
|
|
172
7
|
export {
|
|
173
|
-
|
|
8
|
+
useNetworkActivityDevTools
|
|
174
9
|
};
|
package/dist/rozenite.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@rozenite/network-activity-plugin","version":"1.0.0-alpha.
|
|
1
|
+
{"name":"@rozenite/network-activity-plugin","version":"1.0.0-alpha.8","description":"Network Activity for Rozenite.","panels":[{"name":"Network Activity","source":"/App.html"}]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NetworkActivityDevToolsClient } from '../../shared/client';
|
|
2
|
+
export type NetworkInspector = {
|
|
3
|
+
enable: () => void;
|
|
4
|
+
disable: () => void;
|
|
5
|
+
isEnabled: () => boolean;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
};
|
|
8
|
+
export declare const getNetworkInspector: (pluginClient: NetworkActivityDevToolsClient) => NetworkInspector;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
type XHRInterceptorOpenCallback = (method: string, url: string, request: XMLHttpRequest) => void;
|
|
2
|
+
type XHRInterceptorSendCallback = (data: string, request: XMLHttpRequest) => void;
|
|
3
|
+
type XHRInterceptorRequestHeaderCallback = (header: string, value: string, request: XMLHttpRequest) => void;
|
|
4
|
+
type XHRInterceptorHeaderReceivedCallback = (responseContentType: string | undefined, responseSize: number | undefined, allHeaders: string, request: XMLHttpRequest) => void;
|
|
5
|
+
type XHRInterceptorResponseCallback = (status: number, timeout: number, response: string, responseURL: string, responseType: string, request: XMLHttpRequest) => void;
|
|
6
|
+
/**
|
|
7
|
+
* A network interceptor which monkey-patches XMLHttpRequest methods
|
|
8
|
+
* to gather all network requests/responses, in order to show their
|
|
9
|
+
* information in the React Native inspector development tool.
|
|
10
|
+
* This supports interception with XMLHttpRequest API, including Fetch API
|
|
11
|
+
* and any other third party libraries that depend on XMLHttpRequest.
|
|
12
|
+
*/
|
|
13
|
+
export declare const XHRInterceptor: {
|
|
14
|
+
/**
|
|
15
|
+
* Invoked before XMLHttpRequest.open(...) is called.
|
|
16
|
+
*/
|
|
17
|
+
setOpenCallback(callback: XHRInterceptorOpenCallback): void;
|
|
18
|
+
/**
|
|
19
|
+
* Invoked before XMLHttpRequest.send(...) is called.
|
|
20
|
+
*/
|
|
21
|
+
setSendCallback(callback: XHRInterceptorSendCallback): void;
|
|
22
|
+
/**
|
|
23
|
+
* Invoked after xhr's readyState becomes xhr.HEADERS_RECEIVED.
|
|
24
|
+
*/
|
|
25
|
+
setHeaderReceivedCallback(callback: XHRInterceptorHeaderReceivedCallback): void;
|
|
26
|
+
/**
|
|
27
|
+
* Invoked after xhr's readyState becomes xhr.DONE.
|
|
28
|
+
*/
|
|
29
|
+
setResponseCallback(callback: XHRInterceptorResponseCallback): void;
|
|
30
|
+
/**
|
|
31
|
+
* Invoked before XMLHttpRequest.setRequestHeader(...) is called.
|
|
32
|
+
*/
|
|
33
|
+
setRequestHeaderCallback(callback: XHRInterceptorRequestHeaderCallback): void;
|
|
34
|
+
isInterceptorEnabled(): boolean;
|
|
35
|
+
enableInterception(): void;
|
|
36
|
+
disableInterception(): void;
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SSEEventMap } from '../../shared/sse-events';
|
|
2
|
+
export type SSEInspector = {
|
|
3
|
+
enable: () => void;
|
|
4
|
+
disable: () => void;
|
|
5
|
+
isEnabled: () => boolean;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
on: <TEventType extends keyof SSEEventMap>(event: TEventType, callback: (data: SSEEventMap[TEventType]) => void) => () => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const getSSEInspector: () => SSEInspector;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { default as EventSource, MessageEvent, ErrorEvent, OpenEvent, CloseEvent, TimeoutEvent, ExceptionEvent } from 'react-native-sse';
|
|
2
|
+
export type SSEInterceptorConnectCallback = (url: string, request: EventSource) => void;
|
|
3
|
+
export type SSEInterceptorMessageCallback = (event: MessageEvent, request: EventSource) => void;
|
|
4
|
+
export type SSEInterceptorErrorCallback = (error: ErrorEvent | TimeoutEvent | ExceptionEvent, request: EventSource) => void;
|
|
5
|
+
export type SSEInterceptorOpenEventCallback = (event: OpenEvent, request: EventSource) => void;
|
|
6
|
+
export type SSEInterceptorCloseCallback = (event: CloseEvent, request: EventSource) => void;
|
|
7
|
+
/**
|
|
8
|
+
* A network interceptor which monkey-patches EventSource open method
|
|
9
|
+
* to gather all SSE connections and events, in order to show their
|
|
10
|
+
* information in the Network Activity panel.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SSEInterceptor: {
|
|
13
|
+
/**
|
|
14
|
+
* Invoked when EventSource.open() is called (connection attempt starting).
|
|
15
|
+
*/
|
|
16
|
+
setConnectCallback(callback: SSEInterceptorConnectCallback): void;
|
|
17
|
+
/**
|
|
18
|
+
* Invoked when a message event is received.
|
|
19
|
+
*/
|
|
20
|
+
setMessageCallback(callback: SSEInterceptorMessageCallback): void;
|
|
21
|
+
/**
|
|
22
|
+
* Invoked when an error event occurs.
|
|
23
|
+
*/
|
|
24
|
+
setErrorCallback(callback: SSEInterceptorErrorCallback): void;
|
|
25
|
+
/**
|
|
26
|
+
* Invoked when the connection is successfully opened (open event fired).
|
|
27
|
+
*/
|
|
28
|
+
setOpenEventCallback(callback: SSEInterceptorOpenEventCallback): void;
|
|
29
|
+
/**
|
|
30
|
+
* Invoked when the connection is closed.
|
|
31
|
+
*/
|
|
32
|
+
setCloseCallback(callback: SSEInterceptorCloseCallback): void;
|
|
33
|
+
isInterceptorEnabled(): boolean;
|
|
34
|
+
enableInterception(): void;
|
|
35
|
+
disableInterception(): void;
|
|
36
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { default as EventSource } from 'react-native-sse';
|
|
2
|
+
export interface EventSourceWithInternals<E extends string = never> extends EventSource<E> {
|
|
3
|
+
url: string;
|
|
4
|
+
/** Used internally to mark the underlying XHR to skip it in XHR interceptor. */
|
|
5
|
+
_xhr?: XMLHttpRequest;
|
|
6
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
2
|
+
type LastOf<T> = UnionToIntersection<T extends unknown ? () => T : never> extends () => infer R ? R : never;
|
|
3
|
+
type Push<T extends unknown[], V> = [...T, V];
|
|
4
|
+
export type UnionToTuple<T, L = LastOf<T>> = [T] extends [never] ? [] : Push<UnionToTuple<Exclude<T, L>>, L>;
|
|
5
|
+
export declare const getContentType: (request: XMLHttpRequest) => string;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WebSocketEventMap } from '../../shared/websocket-events';
|
|
2
|
+
export type WebSocketInspector = {
|
|
3
|
+
enable: () => void;
|
|
4
|
+
disable: () => void;
|
|
5
|
+
isEnabled: () => boolean;
|
|
6
|
+
dispose: () => void;
|
|
7
|
+
on: <TEventType extends keyof WebSocketEventMap>(event: TEventType, callback: (data: WebSocketEventMap[TEventType]) => void) => () => void;
|
|
8
|
+
};
|
|
9
|
+
export declare const getWebSocketInspector: () => WebSocketInspector;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { default as WebSocketInterceptor } from 'react-native/Libraries/WebSocket/WebSocketInterceptor';
|
|
2
|
+
export interface WebSocketInterceptor {
|
|
3
|
+
/**
|
|
4
|
+
* Invoked when RCTWebSocketModule.close(...) is called.
|
|
5
|
+
*/
|
|
6
|
+
setCloseCallback(callback: (code: number | null, reason: string | null, socketId: number) => void): void;
|
|
7
|
+
/**
|
|
8
|
+
* Invoked when RCTWebSocketModule.send(...) or sendBinary(...) is called.
|
|
9
|
+
*/
|
|
10
|
+
setSendCallback(callback: (data: string, socketId: number) => void): void;
|
|
11
|
+
/**
|
|
12
|
+
* Invoked when RCTWebSocketModule.connect(...) is called.
|
|
13
|
+
*/
|
|
14
|
+
setConnectCallback(callback: (url: string, protocols: string[] | null, options: string[], socketId: number) => void): void;
|
|
15
|
+
/**
|
|
16
|
+
* Invoked when event "websocketOpen" happens.
|
|
17
|
+
*/
|
|
18
|
+
setOnOpenCallback(callback: (socketId: number) => void): void;
|
|
19
|
+
/**
|
|
20
|
+
* Invoked when event "websocketMessage" happens.
|
|
21
|
+
*/
|
|
22
|
+
setOnMessageCallback(callback: (data: string, socketId: number) => void): void;
|
|
23
|
+
/**
|
|
24
|
+
* Invoked when event "websocketFailed" happens.
|
|
25
|
+
*/
|
|
26
|
+
setOnErrorCallback(callback: (error: string, socketId: number) => void): void;
|
|
27
|
+
/**
|
|
28
|
+
* Invoked when event "websocketClosed" happens.
|
|
29
|
+
*/
|
|
30
|
+
setOnCloseCallback(callback: (error: {
|
|
31
|
+
code: number;
|
|
32
|
+
reason?: string;
|
|
33
|
+
}, socketId: number) => void): void;
|
|
34
|
+
isInterceptorEnabled(): boolean;
|
|
35
|
+
enableInterception(): void;
|
|
36
|
+
disableInterception(): void;
|
|
37
|
+
}
|
|
38
|
+
export interface WebSocketInterceptorPreRN079 {
|
|
39
|
+
/**
|
|
40
|
+
* Invoked when RCTWebSocketModule.close(...) is called.
|
|
41
|
+
*/
|
|
42
|
+
setCloseCallback(callback: (code: number | null, reason: string | null, socketId: number) => void): void;
|
|
43
|
+
/**
|
|
44
|
+
* Invoked when RCTWebSocketModule.send(...) or sendBinary(...) is called.
|
|
45
|
+
*/
|
|
46
|
+
setSendCallback(callback: (data: string, socketId: number) => void): void;
|
|
47
|
+
/**
|
|
48
|
+
* Invoked when RCTWebSocketModule.connect(...) is called.
|
|
49
|
+
*/
|
|
50
|
+
setConnectCallback(callback: (url: string, protocols: string[] | null, options: string[], socketId: number) => void): void;
|
|
51
|
+
/**
|
|
52
|
+
* Invoked when event "websocketOpen" happens.
|
|
53
|
+
*/
|
|
54
|
+
setOnOpenCallback(callback: (socketId: number) => void): void;
|
|
55
|
+
/**
|
|
56
|
+
* Invoked when event "websocketMessage" happens.
|
|
57
|
+
*/
|
|
58
|
+
setOnMessageCallback(callback: (socketId: number, data: string) => void): void;
|
|
59
|
+
/**
|
|
60
|
+
* Invoked when event "websocketFailed" happens.
|
|
61
|
+
*/
|
|
62
|
+
setOnErrorCallback(callback: (socketId: number, error: string) => void): void;
|
|
63
|
+
/**
|
|
64
|
+
* Invoked when event "websocketClosed" happens.
|
|
65
|
+
*/
|
|
66
|
+
setOnCloseCallback(callback: (socketId: number, error: {
|
|
67
|
+
code: number;
|
|
68
|
+
reason?: string;
|
|
69
|
+
}) => void): void;
|
|
70
|
+
isInterceptorEnabled(): boolean;
|
|
71
|
+
enableInterception(): void;
|
|
72
|
+
disableInterception(): void;
|
|
73
|
+
}
|
|
74
|
+
export declare const getWebSocketInterceptor: () => WebSocketInterceptor;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { RozeniteDevToolsClient } from '@rozenite/plugin-bridge';
|
|
2
|
+
import { WebSocketEventMap } from './websocket-events';
|
|
3
|
+
import { SSEEventMap } from './sse-events';
|
|
4
|
+
export type HttpHeaders = Record<string, string>;
|
|
5
|
+
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';
|
|
6
|
+
export type RequestId = string;
|
|
7
|
+
export type Timestamp = number;
|
|
8
|
+
export type Request = {
|
|
9
|
+
url: string;
|
|
10
|
+
method: HttpMethod;
|
|
11
|
+
headers: HttpHeaders;
|
|
12
|
+
postData?: string;
|
|
13
|
+
};
|
|
14
|
+
export type Response = {
|
|
15
|
+
url: string;
|
|
16
|
+
status: number;
|
|
17
|
+
statusText: string;
|
|
18
|
+
headers: HttpHeaders;
|
|
19
|
+
contentType: string;
|
|
20
|
+
size: number;
|
|
21
|
+
responseTime: Timestamp;
|
|
22
|
+
};
|
|
23
|
+
export type Initiator = {
|
|
24
|
+
type: string;
|
|
25
|
+
url?: string;
|
|
26
|
+
lineNumber?: number;
|
|
27
|
+
columnNumber?: number;
|
|
28
|
+
};
|
|
29
|
+
export type ResourceType = 'XHR' | 'Fetch' | 'Other';
|
|
30
|
+
export type NetworkActivityEventMap = {
|
|
31
|
+
'network-enable': unknown;
|
|
32
|
+
'network-disable': unknown;
|
|
33
|
+
'request-sent': {
|
|
34
|
+
requestId: RequestId;
|
|
35
|
+
request: Request;
|
|
36
|
+
timestamp: Timestamp;
|
|
37
|
+
initiator: Initiator;
|
|
38
|
+
type: ResourceType;
|
|
39
|
+
};
|
|
40
|
+
'response-received': {
|
|
41
|
+
requestId: RequestId;
|
|
42
|
+
timestamp: Timestamp;
|
|
43
|
+
type: ResourceType;
|
|
44
|
+
response: Response;
|
|
45
|
+
};
|
|
46
|
+
'request-completed': {
|
|
47
|
+
requestId: RequestId;
|
|
48
|
+
timestamp: Timestamp;
|
|
49
|
+
duration: number;
|
|
50
|
+
size: number;
|
|
51
|
+
ttfb: number;
|
|
52
|
+
};
|
|
53
|
+
'request-failed': {
|
|
54
|
+
requestId: RequestId;
|
|
55
|
+
timestamp: Timestamp;
|
|
56
|
+
type: ResourceType;
|
|
57
|
+
error: string;
|
|
58
|
+
canceled: boolean;
|
|
59
|
+
};
|
|
60
|
+
'get-response-body': {
|
|
61
|
+
requestId: RequestId;
|
|
62
|
+
};
|
|
63
|
+
'response-body': {
|
|
64
|
+
requestId: RequestId;
|
|
65
|
+
body: string | null;
|
|
66
|
+
};
|
|
67
|
+
} & WebSocketEventMap & SSEEventMap;
|
|
68
|
+
export type NetworkActivityDevToolsClient = RozeniteDevToolsClient<NetworkActivityEventMap>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Response } from './client';
|
|
2
|
+
export type SSEConnectionStatus = 'connecting' | 'open' | 'closed';
|
|
3
|
+
export type SSERequestId = string;
|
|
4
|
+
export type SSEOpenEvent = {
|
|
5
|
+
type: 'sse-open';
|
|
6
|
+
requestId: SSERequestId;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
response: Response;
|
|
9
|
+
};
|
|
10
|
+
export type SSEMessageEvent = {
|
|
11
|
+
type: 'sse-message';
|
|
12
|
+
requestId: SSERequestId;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
data: string;
|
|
15
|
+
};
|
|
16
|
+
export type SSEErrorEvent = {
|
|
17
|
+
type: 'sse-error';
|
|
18
|
+
requestId: SSERequestId;
|
|
19
|
+
timestamp: number;
|
|
20
|
+
error: {
|
|
21
|
+
type: 'error' | 'timeout' | 'exception';
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export type SSECloseEvent = {
|
|
26
|
+
type: 'sse-close';
|
|
27
|
+
requestId: SSERequestId;
|
|
28
|
+
timestamp: number;
|
|
29
|
+
};
|
|
30
|
+
export type SSEEvent = SSEOpenEvent | SSEMessageEvent | SSEErrorEvent | SSECloseEvent;
|
|
31
|
+
export type SSEEventMap = {
|
|
32
|
+
[K in SSEEvent['type']]: Extract<SSEEvent, {
|
|
33
|
+
type: K;
|
|
34
|
+
}>;
|
|
35
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export type WebSocketMessageType = 'text' | 'binary';
|
|
2
|
+
export type WebSocketConnectionStatus = 'connecting' | 'open' | 'closing' | 'closed';
|
|
3
|
+
export type WebSocketConnectEvent = {
|
|
4
|
+
type: 'websocket-connect';
|
|
5
|
+
url: string;
|
|
6
|
+
socketId: number;
|
|
7
|
+
timestamp: number;
|
|
8
|
+
protocols: string[] | null;
|
|
9
|
+
options: string[];
|
|
10
|
+
};
|
|
11
|
+
export type WebSocketOpenEvent = {
|
|
12
|
+
type: 'websocket-open';
|
|
13
|
+
url: string;
|
|
14
|
+
socketId: number;
|
|
15
|
+
timestamp: number;
|
|
16
|
+
};
|
|
17
|
+
export type WebSocketCloseEvent = {
|
|
18
|
+
type: 'websocket-close';
|
|
19
|
+
url: string;
|
|
20
|
+
socketId: number;
|
|
21
|
+
timestamp: number;
|
|
22
|
+
code: number;
|
|
23
|
+
reason?: string;
|
|
24
|
+
};
|
|
25
|
+
export type WebSocketMessageSentEvent = {
|
|
26
|
+
type: 'websocket-message-sent';
|
|
27
|
+
url: string;
|
|
28
|
+
socketId: number;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
data: string;
|
|
31
|
+
messageType: WebSocketMessageType;
|
|
32
|
+
};
|
|
33
|
+
export type WebSocketMessageReceivedEvent = {
|
|
34
|
+
type: 'websocket-message-received';
|
|
35
|
+
url: string;
|
|
36
|
+
socketId: number;
|
|
37
|
+
timestamp: number;
|
|
38
|
+
data: string;
|
|
39
|
+
messageType: WebSocketMessageType;
|
|
40
|
+
};
|
|
41
|
+
export type WebSocketErrorEvent = {
|
|
42
|
+
type: 'websocket-error';
|
|
43
|
+
url: string;
|
|
44
|
+
socketId: number;
|
|
45
|
+
timestamp: number;
|
|
46
|
+
error: string;
|
|
47
|
+
};
|
|
48
|
+
export type WebSocketConnectionStatusChangedEvent = {
|
|
49
|
+
type: 'websocket-connection-status-changed';
|
|
50
|
+
url: string;
|
|
51
|
+
socketId: number;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
status: WebSocketConnectionStatus;
|
|
54
|
+
};
|
|
55
|
+
export type WebSocketEvent = WebSocketConnectEvent | WebSocketOpenEvent | WebSocketCloseEvent | WebSocketMessageSentEvent | WebSocketMessageReceivedEvent | WebSocketErrorEvent | WebSocketConnectionStatusChangedEvent;
|
|
56
|
+
export type WebSocketEventMap = {
|
|
57
|
+
[K in WebSocketEvent['type']]: Extract<WebSocketEvent, {
|
|
58
|
+
type: K;
|
|
59
|
+
}>;
|
|
60
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function NetworkActivityPanel(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
declare const badgeVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | null | undefined;
|
|
5
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
6
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
|
|
7
|
+
}
|
|
8
|
+
declare function Badge({ className, variant, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export { Badge, badgeVariants };
|