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.
- package/LICENSE +21 -0
- package/README.md +194 -0
- package/dist/cli.d.ts +8 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +186 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +78 -0
- package/dist/config.js.map +1 -0
- package/dist/devtools/event-bus.d.ts +12 -0
- package/dist/devtools/event-bus.d.ts.map +1 -0
- package/dist/devtools/event-bus.js +47 -0
- package/dist/devtools/event-bus.js.map +1 -0
- package/dist/devtools/index.d.ts +25 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +55 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/devtools/panel.d.ts +19 -0
- package/dist/devtools/panel.d.ts.map +1 -0
- package/dist/devtools/panel.js +308 -0
- package/dist/devtools/panel.js.map +1 -0
- package/dist/devtools/server.d.ts +39 -0
- package/dist/devtools/server.d.ts.map +1 -0
- package/dist/devtools/server.js +184 -0
- package/dist/devtools/server.js.map +1 -0
- package/dist/devtools/sse-handler.d.ts +5 -0
- package/dist/devtools/sse-handler.d.ts.map +1 -0
- package/dist/devtools/sse-handler.js +92 -0
- package/dist/devtools/sse-handler.js.map +1 -0
- package/dist/devtools/store.d.ts +31 -0
- package/dist/devtools/store.d.ts.map +1 -0
- package/dist/devtools/store.js +145 -0
- package/dist/devtools/store.js.map +1 -0
- package/dist/devtools/types.d.ts +45 -0
- package/dist/devtools/types.d.ts.map +1 -0
- package/dist/devtools/types.js +18 -0
- package/dist/devtools/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptor.d.ts +14 -0
- package/dist/interceptor.d.ts.map +1 -0
- package/dist/interceptor.js +404 -0
- package/dist/interceptor.js.map +1 -0
- package/dist/logger.d.ts +23 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +123 -0
- package/dist/logger.js.map +1 -0
- package/dist/nextjs.d.ts +43 -0
- package/dist/nextjs.d.ts.map +1 -0
- package/dist/nextjs.js +55 -0
- package/dist/nextjs.js.map +1 -0
- package/dist/preload.d.ts +2 -0
- package/dist/preload.d.ts.map +1 -0
- package/dist/preload.js +24 -0
- package/dist/preload.js.map +1 -0
- package/dist/test-interceptor.d.ts +5 -0
- package/dist/test-interceptor.d.ts.map +1 -0
- package/dist/test-interceptor.js +113 -0
- package/dist/test-interceptor.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createSSEHandler = createSSEHandler;
|
|
4
|
+
const event_bus_1 = require("./event-bus");
|
|
5
|
+
/**
|
|
6
|
+
* Creates a Server-Sent Events (SSE) stream handler for Next.js App Router
|
|
7
|
+
*/
|
|
8
|
+
function createSSEHandler() {
|
|
9
|
+
return function GET(req) {
|
|
10
|
+
console.log('[serverreq API] Received SSE connection request');
|
|
11
|
+
try {
|
|
12
|
+
if (process.env.NODE_ENV === 'production') {
|
|
13
|
+
console.log('[serverreq API] Rejecting production request');
|
|
14
|
+
return new Response('Not available in production', { status: 404 });
|
|
15
|
+
}
|
|
16
|
+
let heartbeat;
|
|
17
|
+
const listener = (event) => {
|
|
18
|
+
// ... defined later
|
|
19
|
+
};
|
|
20
|
+
const clearListener = () => {
|
|
21
|
+
// ... defined later
|
|
22
|
+
};
|
|
23
|
+
const stream = new ReadableStream({
|
|
24
|
+
start(controller) {
|
|
25
|
+
console.log('[serverreq API] Stream started');
|
|
26
|
+
const encoder = new TextEncoder();
|
|
27
|
+
// Send initial history
|
|
28
|
+
const history = event_bus_1.eventBus.getHistory();
|
|
29
|
+
console.log(`[serverreq API] Sending initial history: ${history.length} items`);
|
|
30
|
+
// Send 'connected' event
|
|
31
|
+
controller.enqueue(encoder.encode(`event: connected\ndata: {"connected":true}\n\n`));
|
|
32
|
+
// Send history array
|
|
33
|
+
if (history.length > 0) {
|
|
34
|
+
controller.enqueue(encoder.encode(`event: history\ndata: ${JSON.stringify(history)}\n\n`));
|
|
35
|
+
}
|
|
36
|
+
// Define listeners
|
|
37
|
+
const onEvent = (event) => {
|
|
38
|
+
try {
|
|
39
|
+
controller.enqueue(encoder.encode(`event: log\ndata: ${JSON.stringify(event)}\n\n`));
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
console.error('[serverreq API] Error sending event:', e);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const onClear = () => {
|
|
46
|
+
try {
|
|
47
|
+
controller.enqueue(encoder.encode(`event: clear\ndata: {}\n\n`));
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
console.error('[serverreq API] Error sending clear:', e);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
event_bus_1.eventBus.on('network:event', onEvent);
|
|
54
|
+
event_bus_1.eventBus.on('network:clear', onClear);
|
|
55
|
+
// Heartbeat
|
|
56
|
+
heartbeat = setInterval(() => {
|
|
57
|
+
try {
|
|
58
|
+
controller.enqueue(encoder.encode(': heartbeat\n\n'));
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
// Controller might be closed
|
|
62
|
+
}
|
|
63
|
+
}, 15000);
|
|
64
|
+
// Store listeners on global for cancel
|
|
65
|
+
controller._cleanup = () => {
|
|
66
|
+
clearInterval(heartbeat);
|
|
67
|
+
event_bus_1.eventBus.off('network:event', onEvent);
|
|
68
|
+
event_bus_1.eventBus.off('network:clear', onClear);
|
|
69
|
+
};
|
|
70
|
+
},
|
|
71
|
+
cancel(controller) {
|
|
72
|
+
console.log('[serverreq API] Stream cancelled (client disconnected)');
|
|
73
|
+
if (controller._cleanup) {
|
|
74
|
+
controller._cleanup();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return new Response(stream, {
|
|
79
|
+
headers: {
|
|
80
|
+
'Content-Type': 'text/event-stream',
|
|
81
|
+
'Cache-Control': 'no-cache',
|
|
82
|
+
'Connection': 'keep-alive',
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('[serverreq API] CRASH in GET handler:', error);
|
|
88
|
+
return new Response('Internal Server Error', { status: 500 });
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=sse-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-handler.js","sourceRoot":"","sources":["../../src/devtools/sse-handler.ts"],"names":[],"mappings":";;AAMA,4CA2FC;AAjGD,2CAAuC;AAGvC;;GAEG;AACH,SAAgB,gBAAgB;IAC5B,OAAO,SAAS,GAAG,CAAC,GAAY;QAC5B,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAE/D,IAAI,CAAC;YACD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;gBAC5D,OAAO,IAAI,QAAQ,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,SAAc,CAAC;YACnB,MAAM,QAAQ,GAAG,CAAC,KAAmB,EAAE,EAAE;gBACrC,oBAAoB;YACxB,CAAC,CAAC;YACF,MAAM,aAAa,GAAG,GAAG,EAAE;gBACvB,oBAAoB;YACxB,CAAC,CAAC;YAEF,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;gBAC9B,KAAK,CAAC,UAAU;oBACZ,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;oBAC9C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;oBAElC,uBAAuB;oBACvB,MAAM,OAAO,GAAG,oBAAQ,CAAC,UAAU,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,4CAA4C,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAC;oBAEhF,yBAAyB;oBACzB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,gDAAgD,CAAC,CAAC,CAAC;oBAErF,qBAAqB;oBACrB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC/F,CAAC;oBAED,mBAAmB;oBACnB,MAAM,OAAO,GAAG,CAAC,KAAmB,EAAE,EAAE;wBACpC,IAAI,CAAC;4BACD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;wBACzF,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACT,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;wBAC7D,CAAC;oBACL,CAAC,CAAC;oBAEF,MAAM,OAAO,GAAG,GAAG,EAAE;wBACjB,IAAI,CAAC;4BACD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;wBACrE,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACT,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,CAAC,CAAC;wBAC7D,CAAC;oBACL,CAAC,CAAC;oBAEF,oBAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBACtC,oBAAQ,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBAEtC,YAAY;oBACZ,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;wBACzB,IAAI,CAAC;4BACD,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;wBAC1D,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACT,6BAA6B;wBACjC,CAAC;oBACL,CAAC,EAAE,KAAK,CAAC,CAAC;oBAEV,uCAAuC;oBACtC,UAAkB,CAAC,QAAQ,GAAG,GAAG,EAAE;wBAChC,aAAa,CAAC,SAAS,CAAC,CAAC;wBACzB,oBAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;wBACvC,oBAAQ,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;oBAC3C,CAAC,CAAC;gBACN,CAAC;gBACD,MAAM,CAAC,UAAU;oBACb,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;oBACtE,IAAK,UAAkB,CAAC,QAAQ,EAAE,CAAC;wBAC9B,UAAkB,CAAC,QAAQ,EAAE,CAAC;oBACnC,CAAC;gBACL,CAAC;aACJ,CAAC,CAAC;YAEH,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE;gBACxB,OAAO,EAAE;oBACL,cAAc,EAAE,mBAAmB;oBACnC,eAAe,EAAE,UAAU;oBAC3B,YAAY,EAAE,YAAY;iBAC7B;aACJ,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC9D,OAAO,IAAI,QAAQ,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAClE,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevTools Store - Singleton external store for React's useSyncExternalStore
|
|
3
|
+
*
|
|
4
|
+
* Uses Server-Sent Events (SSE) for real-time updates.
|
|
5
|
+
*/
|
|
6
|
+
import { NetworkEvent } from './types';
|
|
7
|
+
type Listener = () => void;
|
|
8
|
+
declare class DevToolsStore {
|
|
9
|
+
private state;
|
|
10
|
+
private listeners;
|
|
11
|
+
private eventSource;
|
|
12
|
+
private initialized;
|
|
13
|
+
private reconnectTimer;
|
|
14
|
+
/**
|
|
15
|
+
* Initialize the store.
|
|
16
|
+
*/
|
|
17
|
+
connect(): void;
|
|
18
|
+
private setupHandlers;
|
|
19
|
+
private cleanup;
|
|
20
|
+
private setState;
|
|
21
|
+
private emitChange;
|
|
22
|
+
subscribe: (listener: Listener) => (() => void);
|
|
23
|
+
getEvents: () => NetworkEvent[];
|
|
24
|
+
getConnectionStatus: () => boolean;
|
|
25
|
+
getConnectionError: () => string | null;
|
|
26
|
+
clearEvents: () => void;
|
|
27
|
+
disconnect(): void;
|
|
28
|
+
}
|
|
29
|
+
export declare const store: DevToolsStore;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/devtools/store.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC;AAQ3B,cAAM,aAAa;IACf,OAAO,CAAC,KAAK,CAIX;IAEF,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAA+B;IAErD;;OAEG;IACH,OAAO,IAAI,IAAI;IAsBf,OAAO,CAAC,aAAa;IAmDrB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,UAAU;IAMlB,SAAS,GAAI,UAAU,QAAQ,KAAG,CAAC,MAAM,IAAI,CAAC,CAK5C;IAEF,SAAS,QAAO,YAAY,EAAE,CAE5B;IAEF,mBAAmB,QAAO,OAAO,CAE/B;IAEF,kBAAkB,QAAO,MAAM,GAAG,IAAI,CAEpC;IAEF,WAAW,QAAO,IAAI,CAQpB;IAEF,UAAU,IAAI,IAAI;CAIrB;AAeD,eAAO,MAAM,KAAK,eAAa,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.store = void 0;
|
|
5
|
+
class DevToolsStore {
|
|
6
|
+
state = {
|
|
7
|
+
events: [],
|
|
8
|
+
isConnected: false,
|
|
9
|
+
connectionError: null,
|
|
10
|
+
};
|
|
11
|
+
listeners = new Set();
|
|
12
|
+
eventSource = null;
|
|
13
|
+
initialized = false;
|
|
14
|
+
reconnectTimer = null;
|
|
15
|
+
/**
|
|
16
|
+
* Initialize the store.
|
|
17
|
+
*/
|
|
18
|
+
connect() {
|
|
19
|
+
if (this.eventSource?.readyState === EventSource.OPEN)
|
|
20
|
+
return;
|
|
21
|
+
if (typeof window === 'undefined')
|
|
22
|
+
return;
|
|
23
|
+
// In Next.js dev, we connect to the API route on the same origin
|
|
24
|
+
const sseUrl = '/api/devtools/stream';
|
|
25
|
+
console.log(`[ServerReq Store] Connecting to SSE: ${sseUrl}`);
|
|
26
|
+
this.cleanup();
|
|
27
|
+
try {
|
|
28
|
+
this.eventSource = new EventSource(sseUrl);
|
|
29
|
+
console.log('[ServerReq Store] EventSource created', this.eventSource.readyState);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
console.error('[ServerReq Store] Failed to create EventSource:', e);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.setupHandlers();
|
|
36
|
+
this.initialized = true;
|
|
37
|
+
}
|
|
38
|
+
setupHandlers() {
|
|
39
|
+
if (!this.eventSource)
|
|
40
|
+
return;
|
|
41
|
+
this.eventSource.onopen = (e) => {
|
|
42
|
+
console.log('[ServerReq Store] SSE Connected (onopen)', e);
|
|
43
|
+
this.setState({ isConnected: true, connectionError: null });
|
|
44
|
+
// Clear reconnect timer if any
|
|
45
|
+
if (this.reconnectTimer) {
|
|
46
|
+
clearTimeout(this.reconnectTimer);
|
|
47
|
+
this.reconnectTimer = null;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
this.eventSource.onerror = (err) => {
|
|
51
|
+
// EventSource auto-reconnects, but we log it and update UI
|
|
52
|
+
console.error('[ServerReq Store] SSE Error/Disconnect:', err);
|
|
53
|
+
// Check readyState
|
|
54
|
+
if (this.eventSource) {
|
|
55
|
+
console.log('[ServerReq Store] readyState:', this.eventSource.readyState);
|
|
56
|
+
}
|
|
57
|
+
this.setState({ isConnected: false });
|
|
58
|
+
};
|
|
59
|
+
// Listen for log events
|
|
60
|
+
this.eventSource.addEventListener('log', (e) => {
|
|
61
|
+
try {
|
|
62
|
+
const event = JSON.parse(e.data);
|
|
63
|
+
this.setState({
|
|
64
|
+
events: [event, ...this.state.events].slice(0, 500),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.error('Failed to parse log event:', err);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
// Listen for initial history
|
|
72
|
+
this.eventSource.addEventListener('history', (e) => {
|
|
73
|
+
try {
|
|
74
|
+
const history = JSON.parse(e.data);
|
|
75
|
+
this.setState({ events: history }); // History is already reversed/sorted from server if using unshift
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.error('Failed to parse history:', err);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Listen for clear events
|
|
82
|
+
this.eventSource.addEventListener('clear', () => {
|
|
83
|
+
this.setState({ events: [] });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
cleanup() {
|
|
87
|
+
if (this.eventSource) {
|
|
88
|
+
this.eventSource.close();
|
|
89
|
+
this.eventSource = null;
|
|
90
|
+
}
|
|
91
|
+
if (this.reconnectTimer) {
|
|
92
|
+
clearTimeout(this.reconnectTimer);
|
|
93
|
+
this.reconnectTimer = null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
setState(partial) {
|
|
97
|
+
this.state = { ...this.state, ...partial };
|
|
98
|
+
this.emitChange();
|
|
99
|
+
}
|
|
100
|
+
emitChange() {
|
|
101
|
+
for (const listener of this.listeners) {
|
|
102
|
+
listener();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
subscribe = (listener) => {
|
|
106
|
+
this.listeners.add(listener);
|
|
107
|
+
return () => {
|
|
108
|
+
this.listeners.delete(listener);
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
getEvents = () => {
|
|
112
|
+
return this.state.events;
|
|
113
|
+
};
|
|
114
|
+
getConnectionStatus = () => {
|
|
115
|
+
return this.state.isConnected;
|
|
116
|
+
};
|
|
117
|
+
getConnectionError = () => {
|
|
118
|
+
return this.state.connectionError;
|
|
119
|
+
};
|
|
120
|
+
clearEvents = () => {
|
|
121
|
+
// We can't easily emit UPSTREAM via SSE (it's one-way).
|
|
122
|
+
// For a simple dev tool, we just clear local state.
|
|
123
|
+
// If upstream clear is needed, we'd fire a POST request to an API endpoint.
|
|
124
|
+
this.setState({ events: [] });
|
|
125
|
+
// Optional: Fire "clear" to server so other tabs sync?
|
|
126
|
+
// fetch('/api/devtools/clear', { method: 'POST' });
|
|
127
|
+
};
|
|
128
|
+
disconnect() {
|
|
129
|
+
this.cleanup();
|
|
130
|
+
this.initialized = false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Singleton reference
|
|
134
|
+
const STORE_KEY = '__serverreq_devtools_store_sse__';
|
|
135
|
+
function getStore() {
|
|
136
|
+
if (typeof globalThis !== 'undefined') {
|
|
137
|
+
if (!globalThis[STORE_KEY]) {
|
|
138
|
+
globalThis[STORE_KEY] = new DevToolsStore();
|
|
139
|
+
}
|
|
140
|
+
return globalThis[STORE_KEY];
|
|
141
|
+
}
|
|
142
|
+
return new DevToolsStore();
|
|
143
|
+
}
|
|
144
|
+
exports.store = getStore();
|
|
145
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/devtools/store.ts"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAkBb,MAAM,aAAa;IACP,KAAK,GAAe;QACxB,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,KAAK;QAClB,eAAe,EAAE,IAAI;KACxB,CAAC;IAEM,SAAS,GAAkB,IAAI,GAAG,EAAE,CAAC;IACrC,WAAW,GAAuB,IAAI,CAAC;IACvC,WAAW,GAAG,KAAK,CAAC;IACpB,cAAc,GAA0B,IAAI,CAAC;IAErD;;OAEG;IACH,OAAO;QACH,IAAI,IAAI,CAAC,WAAW,EAAE,UAAU,KAAK,WAAW,CAAC,IAAI;YAAE,OAAO;QAC9D,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAE1C,iEAAiE;QACjE,MAAM,MAAM,GAAG,sBAAsB,CAAC;QAEtC,OAAO,CAAC,GAAG,CAAC,wCAAwC,MAAM,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACtF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO;QACX,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEO,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAE9B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,+BAA+B;YAC/B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;YAC/B,2DAA2D;YAC3D,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;YAC9D,mBAAmB;YACnB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YAC9E,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAe,EAAE,EAAE;YACzD,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAiB,CAAC;gBACjD,IAAI,CAAC,QAAQ,CAAC;oBACV,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;iBACtD,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAe,EAAE,EAAE;YAC7D,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAmB,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,kEAAkE;YAC1G,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,OAAO;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC/B,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,OAA4B;QACzC,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;IAEO,UAAU;QACd,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,EAAE,CAAC;QACf,CAAC;IACL,CAAC;IAED,SAAS,GAAG,CAAC,QAAkB,EAAgB,EAAE;QAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,SAAS,GAAG,GAAmB,EAAE;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC,CAAC;IAEF,mBAAmB,GAAG,GAAY,EAAE;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAClC,CAAC,CAAC;IAEF,kBAAkB,GAAG,GAAkB,EAAE;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;IACtC,CAAC,CAAC;IAEF,WAAW,GAAG,GAAS,EAAE;QACrB,yDAAyD;QACzD,oDAAoD;QACpD,4EAA4E;QAC5E,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9B,wDAAwD;QACxD,qDAAqD;IACzD,CAAC,CAAC;IAEF,UAAU;QACN,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,CAAC;CACJ;AAED,sBAAsB;AACtB,MAAM,SAAS,GAAG,kCAAkC,CAAC;AAErD,SAAS,QAAQ;IACb,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,CAAC;QACpC,IAAI,CAAE,UAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,UAAkB,CAAC,SAAS,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;QACzD,CAAC;QACD,OAAQ,UAAkB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,aAAa,EAAE,CAAC;AAC/B,CAAC;AAEY,QAAA,KAAK,GAAG,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for serverreq DevTools
|
|
3
|
+
*/
|
|
4
|
+
export interface NetworkEvent {
|
|
5
|
+
/** Unique identifier for the event */
|
|
6
|
+
id: string;
|
|
7
|
+
/** Unix timestamp when the request was initiated */
|
|
8
|
+
timestamp: number;
|
|
9
|
+
/** HTTP method (GET, POST, PUT, DELETE, PATCH, etc.) */
|
|
10
|
+
method: string;
|
|
11
|
+
/** Full URL of the request */
|
|
12
|
+
url: string;
|
|
13
|
+
/** Request headers (masked if sensitive) */
|
|
14
|
+
requestHeaders: Record<string, string>;
|
|
15
|
+
/** Request body (truncated if large) */
|
|
16
|
+
requestBody?: string | null;
|
|
17
|
+
/** HTTP status code of the response */
|
|
18
|
+
status?: number;
|
|
19
|
+
/** Response headers (masked if sensitive) */
|
|
20
|
+
responseHeaders?: Record<string, string>;
|
|
21
|
+
/** Response body (truncated if large) */
|
|
22
|
+
responseBody?: string | null;
|
|
23
|
+
/** Duration in milliseconds */
|
|
24
|
+
duration?: number;
|
|
25
|
+
/** Error message if the request failed */
|
|
26
|
+
error?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface DevToolsConfig {
|
|
29
|
+
/** Enable/disable DevTools (auto-disabled in production) */
|
|
30
|
+
enabled: boolean;
|
|
31
|
+
/** Maximum number of events to retain in history */
|
|
32
|
+
maxEvents?: number;
|
|
33
|
+
}
|
|
34
|
+
/** Socket.IO event names */
|
|
35
|
+
export declare const SOCKET_EVENTS: {
|
|
36
|
+
/** Emitted when a new network event occurs */
|
|
37
|
+
readonly NETWORK_EVENT: "network:event";
|
|
38
|
+
/** Emitted to send event history to newly connected clients */
|
|
39
|
+
readonly HISTORY: "network:history";
|
|
40
|
+
/** Emitted to clear all events */
|
|
41
|
+
readonly CLEAR: "network:clear";
|
|
42
|
+
};
|
|
43
|
+
/** Socket.IO namespace for serverreq */
|
|
44
|
+
export declare const SOCKET_NAMESPACE = "/serverreq";
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/devtools/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IACzB,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,uCAAuC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4BAA4B;AAC5B,eAAO,MAAM,aAAa;IACtB,8CAA8C;;IAE9C,+DAA+D;;IAE/D,kCAAkC;;CAE5B,CAAC;AAEX,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared types for serverreq DevTools
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SOCKET_NAMESPACE = exports.SOCKET_EVENTS = void 0;
|
|
7
|
+
/** Socket.IO event names */
|
|
8
|
+
exports.SOCKET_EVENTS = {
|
|
9
|
+
/** Emitted when a new network event occurs */
|
|
10
|
+
NETWORK_EVENT: 'network:event',
|
|
11
|
+
/** Emitted to send event history to newly connected clients */
|
|
12
|
+
HISTORY: 'network:history',
|
|
13
|
+
/** Emitted to clear all events */
|
|
14
|
+
CLEAR: 'network:clear',
|
|
15
|
+
};
|
|
16
|
+
/** Socket.IO namespace for serverreq */
|
|
17
|
+
exports.SOCKET_NAMESPACE = '/serverreq';
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/devtools/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAkCH,4BAA4B;AACf,QAAA,aAAa,GAAG;IACzB,8CAA8C;IAC9C,aAAa,EAAE,eAAe;IAC9B,+DAA+D;IAC/D,OAAO,EAAE,iBAAiB;IAC1B,kCAAkC;IAClC,KAAK,EAAE,eAAe;CAChB,CAAC;AAEX,wCAAwC;AAC3B,QAAA,gBAAgB,GAAG,YAAY,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServerReq - Production-ready HTTP/HTTPS request interceptor
|
|
3
|
+
*
|
|
4
|
+
* Server-side exports for Node.js
|
|
5
|
+
*/
|
|
6
|
+
import { install, uninstall } from './interceptor';
|
|
7
|
+
import { ServerReqConfig } from './config';
|
|
8
|
+
export { install, uninstall };
|
|
9
|
+
/**
|
|
10
|
+
* Configure the interceptor options
|
|
11
|
+
*/
|
|
12
|
+
export declare function configure(options: Partial<ServerReqConfig>): void;
|
|
13
|
+
export type { ServerReqConfig } from './config';
|
|
14
|
+
export type { RequestMetadata } from './logger';
|
|
15
|
+
export { devToolsServer } from './devtools/server';
|
|
16
|
+
export { eventBus } from './devtools/event-bus';
|
|
17
|
+
export type { NetworkEvent, DevToolsConfig } from './devtools/types';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAa,eAAe,EAAE,MAAM,UAAU,CAAC;AAGtD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAE9B;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAEjE;AAGD,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ServerReq - Production-ready HTTP/HTTPS request interceptor
|
|
4
|
+
*
|
|
5
|
+
* Server-side exports for Node.js
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.eventBus = exports.devToolsServer = exports.uninstall = exports.install = void 0;
|
|
9
|
+
exports.configure = configure;
|
|
10
|
+
const interceptor_1 = require("./interceptor");
|
|
11
|
+
Object.defineProperty(exports, "install", { enumerable: true, get: function () { return interceptor_1.install; } });
|
|
12
|
+
Object.defineProperty(exports, "uninstall", { enumerable: true, get: function () { return interceptor_1.uninstall; } });
|
|
13
|
+
const config_1 = require("./config");
|
|
14
|
+
/**
|
|
15
|
+
* Configure the interceptor options
|
|
16
|
+
*/
|
|
17
|
+
function configure(options) {
|
|
18
|
+
(0, config_1.getConfig)().merge(options);
|
|
19
|
+
}
|
|
20
|
+
// DevTools server for Next.js integration
|
|
21
|
+
var server_1 = require("./devtools/server");
|
|
22
|
+
Object.defineProperty(exports, "devToolsServer", { enumerable: true, get: function () { return server_1.devToolsServer; } });
|
|
23
|
+
var event_bus_1 = require("./devtools/event-bus");
|
|
24
|
+
Object.defineProperty(exports, "eventBus", { enumerable: true, get: function () { return event_bus_1.eventBus; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH,8BAEC;AAXD,+CAAmD;AAI1C,wFAJA,qBAAO,OAIA;AAAE,0FAJA,uBAAS,OAIA;AAH3B,qCAAsD;AAKtD;;GAEG;AACH,SAAgB,SAAS,CAAC,OAAiC;IACvD,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAMD,0CAA0C;AAC1C,4CAAmD;AAA1C,wGAAA,cAAc,OAAA;AACvB,kDAAgD;AAAvC,qGAAA,QAAQ,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP/HTTPS Interceptor for Node.js >= 18
|
|
3
|
+
* Patches globalThis.fetch, http.request, and https.request to log all outgoing requests and responses.
|
|
4
|
+
* Compatible with Next.js (App Router, Server Actions, etc.)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Installs the HTTP/HTTPS interceptor
|
|
8
|
+
*/
|
|
9
|
+
export declare function install(): void;
|
|
10
|
+
/**
|
|
11
|
+
* Uninstalls the HTTP/HTTPS interceptor and restores original implementations
|
|
12
|
+
*/
|
|
13
|
+
export declare function uninstall(): void;
|
|
14
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA2YH;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAkB9B;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAoBhC"}
|