serverreq 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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +194 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +186 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +21 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +78 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/devtools/event-bus.d.ts +12 -0
  12. package/dist/devtools/event-bus.d.ts.map +1 -0
  13. package/dist/devtools/event-bus.js +47 -0
  14. package/dist/devtools/event-bus.js.map +1 -0
  15. package/dist/devtools/index.d.ts +25 -0
  16. package/dist/devtools/index.d.ts.map +1 -0
  17. package/dist/devtools/index.js +55 -0
  18. package/dist/devtools/index.js.map +1 -0
  19. package/dist/devtools/panel.d.ts +19 -0
  20. package/dist/devtools/panel.d.ts.map +1 -0
  21. package/dist/devtools/panel.js +308 -0
  22. package/dist/devtools/panel.js.map +1 -0
  23. package/dist/devtools/server.d.ts +39 -0
  24. package/dist/devtools/server.d.ts.map +1 -0
  25. package/dist/devtools/server.js +184 -0
  26. package/dist/devtools/server.js.map +1 -0
  27. package/dist/devtools/sse-handler.d.ts +5 -0
  28. package/dist/devtools/sse-handler.d.ts.map +1 -0
  29. package/dist/devtools/sse-handler.js +92 -0
  30. package/dist/devtools/sse-handler.js.map +1 -0
  31. package/dist/devtools/store.d.ts +31 -0
  32. package/dist/devtools/store.d.ts.map +1 -0
  33. package/dist/devtools/store.js +145 -0
  34. package/dist/devtools/store.js.map +1 -0
  35. package/dist/devtools/types.d.ts +45 -0
  36. package/dist/devtools/types.d.ts.map +1 -0
  37. package/dist/devtools/types.js +18 -0
  38. package/dist/devtools/types.js.map +1 -0
  39. package/dist/index.d.ts +18 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +25 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/interceptor.d.ts +14 -0
  44. package/dist/interceptor.d.ts.map +1 -0
  45. package/dist/interceptor.js +404 -0
  46. package/dist/interceptor.js.map +1 -0
  47. package/dist/logger.d.ts +23 -0
  48. package/dist/logger.d.ts.map +1 -0
  49. package/dist/logger.js +123 -0
  50. package/dist/logger.js.map +1 -0
  51. package/dist/nextjs.d.ts +43 -0
  52. package/dist/nextjs.d.ts.map +1 -0
  53. package/dist/nextjs.js +55 -0
  54. package/dist/nextjs.js.map +1 -0
  55. package/dist/preload.d.ts +2 -0
  56. package/dist/preload.d.ts.map +1 -0
  57. package/dist/preload.js +24 -0
  58. package/dist/preload.js.map +1 -0
  59. package/dist/test-interceptor.d.ts +5 -0
  60. package/dist/test-interceptor.d.ts.map +1 -0
  61. package/dist/test-interceptor.js +113 -0
  62. package/dist/test-interceptor.js.map +1 -0
  63. package/package.json +94 -0
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * serverreq/devtools - Client-side DevTools exports
4
+ *
5
+ * Usage in Next.js App Router layout.tsx:
6
+ *
7
+ * ```tsx
8
+ * import { ServerReqDevtools } from 'serverreq/devtools';
9
+ *
10
+ * export default function RootLayout({ children }) {
11
+ * return (
12
+ * <html>
13
+ * <body>
14
+ * {children}
15
+ * {process.env.NODE_ENV === 'development' && <ServerReqDevtools />}
16
+ * </body>
17
+ * </html>
18
+ * );
19
+ * }
20
+ * ```
21
+ */
22
+ 'use client';
23
+ /**
24
+ * serverreq/devtools - Client-side DevTools exports
25
+ *
26
+ * Usage in Next.js App Router layout.tsx:
27
+ *
28
+ * ```tsx
29
+ * import { ServerReqDevtools } from 'serverreq/devtools';
30
+ *
31
+ * export default function RootLayout({ children }) {
32
+ * return (
33
+ * <html>
34
+ * <body>
35
+ * {children}
36
+ * {process.env.NODE_ENV === 'development' && <ServerReqDevtools />}
37
+ * </body>
38
+ * </html>
39
+ * );
40
+ * }
41
+ * ```
42
+ */
43
+ var __importDefault = (this && this.__importDefault) || function (mod) {
44
+ return (mod && mod.__esModule) ? mod : { "default": mod };
45
+ };
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.store = exports.default = exports.ServerReqDevtools = void 0;
48
+ // Re-export the main component
49
+ var panel_1 = require("./panel");
50
+ Object.defineProperty(exports, "ServerReqDevtools", { enumerable: true, get: function () { return panel_1.ServerReqDevtools; } });
51
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(panel_1).default; } });
52
+ // Re-export the store for advanced usage
53
+ var store_1 = require("./store");
54
+ Object.defineProperty(exports, "store", { enumerable: true, get: function () { return store_1.store; } });
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,YAAY,CAAC;AArBb;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;AAIH,+BAA+B;AAC/B,iCAAqD;AAA5C,0GAAA,iBAAiB,OAAA;AAAE,iHAAA,OAAO,OAAA;AAGnC,yCAAyC;AACzC,iCAAgC;AAAvB,8FAAA,KAAK,OAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ServerReq DevTools Panel Component
3
+ *
4
+ * A floating DevTools panel similar to React Query DevTools.
5
+ * Uses useSyncExternalStore for state management.
6
+ * All socket logic is in the store - components are "dumb".
7
+ */
8
+ import React from "react";
9
+ export interface ServerReqDevtoolsProps {
10
+ /** Custom socket URL (defaults to auto-detection) */
11
+ socketUrl?: string;
12
+ /** Initial open state */
13
+ defaultOpen?: boolean;
14
+ /** Position of the toggle button */
15
+ position?: "bottom-right" | "bottom-left";
16
+ }
17
+ export declare const ServerReqDevtools: React.FC<ServerReqDevtoolsProps>;
18
+ export default ServerReqDevtools;
19
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/devtools/panel.tsx"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,OAAO,KAKN,MAAM,OAAO,CAAC;AAiYf,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;CAC3C;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAuJ9D,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ServerReqDevtools = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ /**
7
+ * ServerReq DevTools Panel Component
8
+ *
9
+ * A floating DevTools panel similar to React Query DevTools.
10
+ * Uses useSyncExternalStore for state management.
11
+ * All socket logic is in the store - components are "dumb".
12
+ */
13
+ const react_1 = require("react");
14
+ const store_1 = require("./store");
15
+ // ============================================================================
16
+ // STYLES
17
+ // ============================================================================
18
+ const styles = {
19
+ // Container for the entire DevTools
20
+ container: {
21
+ position: "fixed",
22
+ bottom: "16px",
23
+ right: "16px",
24
+ zIndex: 99999,
25
+ fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',
26
+ },
27
+ // Toggle button (floating action button style)
28
+ toggleButton: {
29
+ width: "48px",
30
+ height: "48px",
31
+ borderRadius: "50%",
32
+ border: "none",
33
+ background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
34
+ color: "#fff",
35
+ cursor: "pointer",
36
+ display: "flex",
37
+ alignItems: "center",
38
+ justifyContent: "center",
39
+ fontSize: "20px",
40
+ boxShadow: "0 4px 20px rgba(102, 126, 234, 0.4)",
41
+ transition: "transform 0.2s, box-shadow 0.2s",
42
+ },
43
+ toggleButtonHover: {
44
+ transform: "scale(1.05)",
45
+ boxShadow: "0 6px 25px rgba(102, 126, 234, 0.5)",
46
+ },
47
+ // Main panel
48
+ panel: {
49
+ width: "700px",
50
+ height: "500px",
51
+ background: "#ffffff",
52
+ borderRadius: "12px",
53
+ boxShadow: "0 10px 40px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05)",
54
+ display: "flex",
55
+ flexDirection: "column",
56
+ overflow: "hidden",
57
+ animation: "serverreq-slide-up 0.2s ease-out",
58
+ },
59
+ // Header
60
+ header: {
61
+ padding: "12px 16px",
62
+ background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
63
+ color: "#fff",
64
+ display: "flex",
65
+ justifyContent: "space-between",
66
+ alignItems: "center",
67
+ },
68
+ headerTitle: {
69
+ display: "flex",
70
+ alignItems: "center",
71
+ gap: "10px",
72
+ fontSize: "14px",
73
+ fontWeight: 600,
74
+ },
75
+ statusBadge: (connected) => ({
76
+ fontSize: "11px",
77
+ padding: "3px 8px",
78
+ borderRadius: "12px",
79
+ background: connected
80
+ ? "rgba(72, 187, 120, 0.2)"
81
+ : "rgba(245, 101, 101, 0.2)",
82
+ color: connected ? "#48bb78" : "#f56565",
83
+ border: `1px solid ${connected ? "rgba(72, 187, 120, 0.3)" : "rgba(245, 101, 101, 0.3)"}`,
84
+ }),
85
+ headerActions: {
86
+ display: "flex",
87
+ gap: "8px",
88
+ },
89
+ iconButton: {
90
+ background: "rgba(255, 255, 255, 0.15)",
91
+ border: "none",
92
+ color: "#fff",
93
+ cursor: "pointer",
94
+ padding: "6px 10px",
95
+ borderRadius: "6px",
96
+ fontSize: "13px",
97
+ display: "flex",
98
+ alignItems: "center",
99
+ gap: "4px",
100
+ transition: "background 0.15s",
101
+ },
102
+ // Content area (split view)
103
+ content: {
104
+ display: "flex",
105
+ flex: 1,
106
+ overflow: "hidden",
107
+ },
108
+ // Request list
109
+ requestList: {
110
+ width: "320px",
111
+ borderRight: "1px solid #e2e8f0",
112
+ overflowY: "auto",
113
+ background: "#fafafa",
114
+ },
115
+ requestItem: (isSelected) => ({
116
+ padding: "10px 14px",
117
+ borderBottom: "1px solid #e2e8f0",
118
+ cursor: "pointer",
119
+ background: isSelected ? "#ebf4ff" : "transparent",
120
+ transition: "background 0.1s",
121
+ display: "grid",
122
+ gridTemplateColumns: "56px 1fr 50px",
123
+ gap: "8px",
124
+ alignItems: "center",
125
+ fontSize: "12px",
126
+ }),
127
+ methodBadge: (method) => {
128
+ const colors = {
129
+ GET: "#48bb78",
130
+ POST: "#4299e1",
131
+ PUT: "#ed8936",
132
+ DELETE: "#f56565",
133
+ PATCH: "#9f7aea",
134
+ };
135
+ return {
136
+ fontWeight: 700,
137
+ color: colors[method] || "#718096",
138
+ fontSize: "11px",
139
+ };
140
+ },
141
+ urlText: {
142
+ overflow: "hidden",
143
+ textOverflow: "ellipsis",
144
+ whiteSpace: "nowrap",
145
+ color: "#4a5568",
146
+ },
147
+ statusCode: (status) => ({
148
+ fontSize: "11px",
149
+ fontWeight: 500,
150
+ color: status >= 400 ? "#f56565" : status >= 300 ? "#ed8936" : "#48bb78",
151
+ textAlign: "right",
152
+ }),
153
+ // Detail panel
154
+ detailPanel: {
155
+ flex: 1,
156
+ overflowY: "auto",
157
+ padding: "16px",
158
+ background: "#fff",
159
+ },
160
+ detailSection: {
161
+ marginBottom: "16px",
162
+ },
163
+ detailLabel: {
164
+ fontSize: "10px",
165
+ fontWeight: 700,
166
+ textTransform: "uppercase",
167
+ color: "#a0aec0",
168
+ marginBottom: "6px",
169
+ letterSpacing: "0.5px",
170
+ },
171
+ detailValue: {
172
+ fontSize: "12px",
173
+ color: "#2d3748",
174
+ wordBreak: "break-all",
175
+ },
176
+ codeBlock: {
177
+ background: "#f7fafc",
178
+ border: "1px solid #e2e8f0",
179
+ borderRadius: "6px",
180
+ padding: "10px",
181
+ fontSize: "11px",
182
+ fontFamily: '"SF Mono", "Fira Code", Consolas, monospace',
183
+ overflow: "auto",
184
+ maxHeight: "150px",
185
+ whiteSpace: "pre-wrap",
186
+ color: "#4a5568",
187
+ },
188
+ emptyState: {
189
+ display: "flex",
190
+ flexDirection: "column",
191
+ alignItems: "center",
192
+ justifyContent: "center",
193
+ height: "100%",
194
+ color: "#a0aec0",
195
+ fontSize: "13px",
196
+ gap: "8px",
197
+ },
198
+ };
199
+ // Keyframe animation (injected once)
200
+ const injectStyles = () => {
201
+ if (typeof document === "undefined")
202
+ return;
203
+ if (document.getElementById("serverreq-devtools-styles"))
204
+ return;
205
+ const style = document.createElement("style");
206
+ style.id = "serverreq-devtools-styles";
207
+ style.textContent = `
208
+ @keyframes serverreq-slide-up {
209
+ from {
210
+ opacity: 0;
211
+ transform: translateY(20px);
212
+ }
213
+ to {
214
+ opacity: 1;
215
+ transform: translateY(0);
216
+ }
217
+ }
218
+ .serverreq-icon-btn:hover {
219
+ background: rgba(255, 255, 255, 0.25) !important;
220
+ }
221
+ .serverreq-request-item:hover {
222
+ background: #f0f5ff !important;
223
+ }
224
+ `;
225
+ document.head.appendChild(style);
226
+ };
227
+ const RequestItem = ({ event, isSelected, onClick, }) => {
228
+ let pathname = event.url;
229
+ try {
230
+ pathname = new URL(event.url).pathname;
231
+ }
232
+ catch { }
233
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "serverreq-request-item", style: styles.requestItem(isSelected), onClick: onClick, children: [(0, jsx_runtime_1.jsx)("span", { style: styles.methodBadge(event.method), children: event.method }), (0, jsx_runtime_1.jsx)("span", { style: styles.urlText, title: event.url, children: pathname }), (0, jsx_runtime_1.jsxs)("span", { style: styles.statusCode(event.status || 0), children: [event.status || "...", event.duration ? ` · ${event.duration}ms` : ""] })] }));
234
+ };
235
+ const DetailPanel = ({ event }) => {
236
+ if (!event) {
237
+ return ((0, jsx_runtime_1.jsx)("div", { style: styles.detailPanel, children: (0, jsx_runtime_1.jsxs)("div", { style: styles.emptyState, children: [(0, jsx_runtime_1.jsx)("span", { style: { fontSize: "24px" }, children: "\uD83D\uDC46" }), (0, jsx_runtime_1.jsx)("span", { children: "Select a request to view details" })] }) }));
238
+ }
239
+ const formatHeaders = (headers) => {
240
+ if (!headers || Object.keys(headers).length === 0)
241
+ return null;
242
+ return Object.entries(headers)
243
+ .map(([k, v]) => `${k}: ${v}`)
244
+ .join("\n");
245
+ };
246
+ const formatBody = (body) => {
247
+ if (!body)
248
+ return null;
249
+ try {
250
+ return JSON.stringify(JSON.parse(body), null, 2);
251
+ }
252
+ catch {
253
+ return body;
254
+ }
255
+ };
256
+ return ((0, jsx_runtime_1.jsxs)("div", { style: styles.detailPanel, children: [(0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "URL" }), (0, jsx_runtime_1.jsx)("div", { style: styles.detailValue, children: event.url })] }), (0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "Response" }), (0, jsx_runtime_1.jsxs)("div", { style: styles.detailValue, children: ["Status: ", (0, jsx_runtime_1.jsx)("strong", { children: event.status || "Pending" }), event.duration && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [" ", "\u00B7 Duration: ", (0, jsx_runtime_1.jsxs)("strong", { children: [event.duration, "ms"] })] }))] })] }), event.requestHeaders && Object.keys(event.requestHeaders).length > 0 && ((0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "Request Headers" }), (0, jsx_runtime_1.jsx)("pre", { style: styles.codeBlock, children: formatHeaders(event.requestHeaders) })] })), event.requestBody && ((0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "Request Body" }), (0, jsx_runtime_1.jsx)("pre", { style: styles.codeBlock, children: formatBody(event.requestBody) })] })), event.responseHeaders &&
257
+ Object.keys(event.responseHeaders).length > 0 && ((0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "Response Headers" }), (0, jsx_runtime_1.jsx)("pre", { style: styles.codeBlock, children: formatHeaders(event.responseHeaders) })] })), event.responseBody && ((0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "Response Body" }), (0, jsx_runtime_1.jsx)("pre", { style: styles.codeBlock, children: formatBody(event.responseBody) })] })), event.error && ((0, jsx_runtime_1.jsxs)("div", { style: styles.detailSection, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.detailLabel, children: "Error" }), (0, jsx_runtime_1.jsx)("pre", { style: { ...styles.codeBlock, color: "#f56565" }, children: event.error })] }))] }));
258
+ };
259
+ const ServerReqDevtools = ({ socketUrl, defaultOpen = false, position = "bottom-right", }) => {
260
+ const [isOpen, setIsOpen] = (0, react_1.useState)(defaultOpen);
261
+ const [selectedEventId, setSelectedEventId] = (0, react_1.useState)(null);
262
+ const [isHovered, setIsHovered] = (0, react_1.useState)(false);
263
+ // Use useSyncExternalStore for reactive state
264
+ const events = (0, react_1.useSyncExternalStore)(store_1.store.subscribe, store_1.store.getEvents, store_1.store.getEvents);
265
+ const isConnected = (0, react_1.useSyncExternalStore)(store_1.store.subscribe, store_1.store.getConnectionStatus, () => false);
266
+ // Initialize SSE connection
267
+ (0, react_1.useEffect)(() => {
268
+ injectStyles();
269
+ store_1.store.connect();
270
+ // Cleanup on unmount
271
+ return () => {
272
+ store_1.store.disconnect();
273
+ };
274
+ }, []);
275
+ // Find selected event
276
+ const selectedEvent = events.find((e) => e.id === selectedEventId) || null;
277
+ // Handle clear
278
+ const handleClear = (0, react_1.useCallback)(() => {
279
+ store_1.store.clearEvents();
280
+ setSelectedEventId(null);
281
+ }, []);
282
+ // Position styles
283
+ const positionStyle = position === "bottom-left" ? { left: "16px", right: "auto" } : {};
284
+ // Render toggle button when closed
285
+ if (!isOpen) {
286
+ return ((0, jsx_runtime_1.jsxs)("div", { style: { ...styles.container, ...positionStyle }, children: [(0, jsx_runtime_1.jsx)("button", { style: {
287
+ ...styles.toggleButton,
288
+ ...(isHovered ? styles.toggleButtonHover : {}),
289
+ }, onClick: () => setIsOpen(true), onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), title: "Open ServerReq DevTools", children: "\u26A1" }), events.length > 0 && ((0, jsx_runtime_1.jsx)("span", { style: {
290
+ position: "absolute",
291
+ top: "-4px",
292
+ right: "-4px",
293
+ background: "#f56565",
294
+ color: "#fff",
295
+ fontSize: "10px",
296
+ fontWeight: 700,
297
+ padding: "2px 6px",
298
+ borderRadius: "10px",
299
+ minWidth: "18px",
300
+ textAlign: "center",
301
+ }, children: events.length }))] }));
302
+ }
303
+ // Render full panel when open
304
+ return ((0, jsx_runtime_1.jsx)("div", { style: { ...styles.container, ...positionStyle }, children: (0, jsx_runtime_1.jsxs)("div", { style: styles.panel, children: [(0, jsx_runtime_1.jsxs)("div", { style: styles.header, children: [(0, jsx_runtime_1.jsxs)("div", { style: styles.headerTitle, children: [(0, jsx_runtime_1.jsx)("span", { children: "\u26A1 ServerReq DevTools" }), (0, jsx_runtime_1.jsx)("span", { style: styles.statusBadge(isConnected), children: isConnected ? "● Connected" : "○ Disconnected" }), (0, jsx_runtime_1.jsxs)("span", { style: { fontSize: "11px", opacity: 0.8 }, children: [events.length, " request", events.length !== 1 ? "s" : ""] })] }), (0, jsx_runtime_1.jsxs)("div", { style: styles.headerActions, children: [(0, jsx_runtime_1.jsx)("button", { className: "serverreq-icon-btn", style: styles.iconButton, onClick: handleClear, title: "Clear all requests", children: "\uD83D\uDDD1\uFE0F Clear" }), (0, jsx_runtime_1.jsx)("button", { className: "serverreq-icon-btn", style: styles.iconButton, onClick: () => setIsOpen(false), title: "Close DevTools", children: "\u2715" })] })] }), (0, jsx_runtime_1.jsxs)("div", { style: styles.content, children: [(0, jsx_runtime_1.jsx)("div", { style: styles.requestList, children: events.length === 0 ? ((0, jsx_runtime_1.jsxs)("div", { style: styles.emptyState, children: [(0, jsx_runtime_1.jsx)("span", { style: { fontSize: "32px" }, children: "\uD83D\uDCE1" }), (0, jsx_runtime_1.jsx)("span", { children: "Waiting for requests..." }), !isConnected && ((0, jsx_runtime_1.jsx)("span", { style: { color: "#f56565", fontSize: "11px" }, children: "Not connected to server" }))] })) : (events.map((event) => ((0, jsx_runtime_1.jsx)(RequestItem, { event: event, isSelected: selectedEventId === event.id, onClick: () => setSelectedEventId(event.id) }, event.id)))) }), (0, jsx_runtime_1.jsx)(DetailPanel, { event: selectedEvent })] })] }) }));
305
+ };
306
+ exports.ServerReqDevtools = ServerReqDevtools;
307
+ exports.default = exports.ServerReqDevtools;
308
+ //# sourceMappingURL=panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/devtools/panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * DevTools Socket.IO server
3
+ * Attaches to the existing Next.js HTTP server via the upgrade event
4
+ */
5
+ import * as http from 'http';
6
+ import { Server } from 'socket.io';
7
+ import { NetworkEvent } from './types';
8
+ export declare class DevToolsServer {
9
+ private static instance;
10
+ private io;
11
+ private httpServer;
12
+ private isProduction;
13
+ private constructor();
14
+ static getInstance(): DevToolsServer;
15
+ /**
16
+ * Check if we're in a production environment
17
+ */
18
+ private shouldDisable;
19
+ /**
20
+ * Attach Socket.IO to an existing HTTP server.
21
+ * This is the recommended approach for Next.js integration.
22
+ */
23
+ attach(server: http.Server): void;
24
+ /**
25
+ * Start a standalone DevTools server on a dedicated port.
26
+ * Fallback for CLI usage when Next.js server attachment isn't possible.
27
+ */
28
+ startStandalone(port?: number): Promise<void>;
29
+ /**
30
+ * Emit a network event (called by interceptor)
31
+ */
32
+ emitEvent(event: NetworkEvent): void;
33
+ /**
34
+ * Get the Socket.IO server instance (for testing)
35
+ */
36
+ getIO(): Server | null;
37
+ }
38
+ export declare const devToolsServer: DevToolsServer;
39
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/devtools/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAU,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAmC,MAAM,SAAS,CAAC;AAGxE,qBAAa,cAAc;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,EAAE,CAAuB;IACjC,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,YAAY,CAAU;IAE9B,OAAO;IAIP,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI;IAuDjC;;;OAGG;IACH,eAAe,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA0DnD;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKpC;;OAEG;IACH,KAAK,IAAI,MAAM,GAAG,IAAI;CAGzB;AAGD,eAAO,MAAM,cAAc,gBAA+B,CAAC"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ /**
3
+ * DevTools Socket.IO server
4
+ * Attaches to the existing Next.js HTTP server via the upgrade event
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.devToolsServer = exports.DevToolsServer = void 0;
41
+ const http = __importStar(require("http"));
42
+ const socket_io_1 = require("socket.io");
43
+ const types_1 = require("./types");
44
+ const event_bus_1 = require("./event-bus");
45
+ class DevToolsServer {
46
+ static instance;
47
+ io = null;
48
+ httpServer = null;
49
+ isProduction;
50
+ constructor() {
51
+ this.isProduction = process.env.NODE_ENV === 'production';
52
+ }
53
+ static getInstance() {
54
+ if (!DevToolsServer.instance) {
55
+ DevToolsServer.instance = new DevToolsServer();
56
+ }
57
+ return DevToolsServer.instance;
58
+ }
59
+ /**
60
+ * Check if we're in a production environment
61
+ */
62
+ shouldDisable() {
63
+ return this.isProduction;
64
+ }
65
+ /**
66
+ * Attach Socket.IO to an existing HTTP server.
67
+ * This is the recommended approach for Next.js integration.
68
+ */
69
+ attach(server) {
70
+ if (this.shouldDisable()) {
71
+ console.log('[serverreq] DevTools disabled in production');
72
+ return;
73
+ }
74
+ if (this.io) {
75
+ console.log('[serverreq] DevTools already attached');
76
+ return;
77
+ }
78
+ this.httpServer = server;
79
+ // Create Socket.IO server on a specific namespace
80
+ this.io = new socket_io_1.Server(server, {
81
+ path: '/serverreq-socket',
82
+ cors: {
83
+ origin: '*', // In dev mode, allow all origins
84
+ methods: ['GET', 'POST'],
85
+ },
86
+ // Use dedicated namespace to avoid conflicts
87
+ transports: ['websocket', 'polling'],
88
+ });
89
+ // Listen on the serverreq namespace
90
+ const namespace = this.io.of(types_1.SOCKET_NAMESPACE);
91
+ namespace.on('connection', (socket) => {
92
+ console.log(`[serverreq] DevTools client connected: ${socket.id}`);
93
+ // Send existing history to the client
94
+ socket.emit(types_1.SOCKET_EVENTS.HISTORY, event_bus_1.eventBus.getHistory());
95
+ socket.on('disconnect', () => {
96
+ console.log(`[serverreq] DevTools client disconnected: ${socket.id}`);
97
+ });
98
+ // Handle clear request from client
99
+ socket.on(types_1.SOCKET_EVENTS.CLEAR, () => {
100
+ event_bus_1.eventBus.clearHistory();
101
+ });
102
+ });
103
+ // Subscribe to event bus
104
+ event_bus_1.eventBus.on('network:event', (event) => {
105
+ namespace.emit(types_1.SOCKET_EVENTS.NETWORK_EVENT, event);
106
+ });
107
+ event_bus_1.eventBus.on('network:clear', () => {
108
+ namespace.emit(types_1.SOCKET_EVENTS.CLEAR);
109
+ });
110
+ console.log('[serverreq] DevTools attached to server');
111
+ }
112
+ /**
113
+ * Start a standalone DevTools server on a dedicated port.
114
+ * Fallback for CLI usage when Next.js server attachment isn't possible.
115
+ */
116
+ startStandalone(port = 4000) {
117
+ if (this.shouldDisable()) {
118
+ console.log('[serverreq] DevTools disabled in production');
119
+ return Promise.resolve();
120
+ }
121
+ return new Promise((resolve, reject) => {
122
+ if (this.httpServer || this.io) {
123
+ console.log('[serverreq] DevTools already running');
124
+ resolve();
125
+ return;
126
+ }
127
+ const server = http.createServer((req, res) => {
128
+ res.setHeader('Access-Control-Allow-Origin', '*');
129
+ res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');
130
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
131
+ if (req.method === 'OPTIONS') {
132
+ res.writeHead(204);
133
+ res.end();
134
+ return;
135
+ }
136
+ if (req.url === '/health') {
137
+ res.writeHead(200, { 'Content-Type': 'application/json' });
138
+ res.end(JSON.stringify({ status: 'ok', events: event_bus_1.eventBus.getHistory().length }));
139
+ return;
140
+ }
141
+ // Let Socket.IO handle its paths
142
+ if (!req.url?.startsWith('/serverreq-socket')) {
143
+ res.writeHead(404);
144
+ res.end('Not found');
145
+ }
146
+ });
147
+ this.attach(server);
148
+ this.httpServer = server;
149
+ server.listen(port, () => {
150
+ console.log(`[serverreq] DevTools standalone server running at http://localhost:${port}`);
151
+ resolve();
152
+ });
153
+ server.on('error', (err) => {
154
+ if (err.code === 'EADDRINUSE') {
155
+ console.log(`[serverreq] Port ${port} in use, trying ${port + 1}...`);
156
+ this.httpServer = null;
157
+ this.io = null;
158
+ this.startStandalone(port + 1).then(resolve).catch(reject);
159
+ }
160
+ else {
161
+ reject(err);
162
+ }
163
+ });
164
+ });
165
+ }
166
+ /**
167
+ * Emit a network event (called by interceptor)
168
+ */
169
+ emitEvent(event) {
170
+ if (this.shouldDisable())
171
+ return;
172
+ event_bus_1.eventBus.emit('network:event', event);
173
+ }
174
+ /**
175
+ * Get the Socket.IO server instance (for testing)
176
+ */
177
+ getIO() {
178
+ return this.io;
179
+ }
180
+ }
181
+ exports.DevToolsServer = DevToolsServer;
182
+ // Export singleton
183
+ exports.devToolsServer = DevToolsServer.getInstance();
184
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/devtools/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Creates a Server-Sent Events (SSE) stream handler for Next.js App Router
3
+ */
4
+ export declare function createSSEHandler(): (req: Request) => Response;
5
+ //# sourceMappingURL=sse-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-handler.d.ts","sourceRoot":"","sources":["../../src/devtools/sse-handler.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,gBAAgB,KACR,KAAK,OAAO,cA0FnC"}