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
package/dist/nextjs.js ADDED
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ /**
3
+ * Next.js Integration Helper for serverreq DevTools
4
+ *
5
+ * This module provides helpers for integrating serverreq with Next.js.
6
+ * Since Next.js doesn't expose its HTTP server directly, we use the
7
+ * standalone DevTools server approach which works reliably with Turbopack.
8
+ *
9
+ * USAGE IN next.config.js:
10
+ * ```js
11
+ * // next.config.js
12
+ * module.exports = {
13
+ * experimental: {
14
+ * instrumentationHook: true
15
+ * }
16
+ * }
17
+ * ```
18
+ *
19
+ * USAGE IN instrumentation.ts:
20
+ * ```ts
21
+ * export async function register() {
22
+ * if (process.env.NODE_ENV === 'development') {
23
+ * const { setupDevTools } = await import('serverreq/nextjs');
24
+ * await setupDevTools();
25
+ * }
26
+ * }
27
+ * ```
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.createSSEHandler = exports.eventBus = exports.install = void 0;
31
+ exports.setupDevTools = setupDevTools;
32
+ const interceptor_1 = require("./interceptor");
33
+ Object.defineProperty(exports, "install", { enumerable: true, get: function () { return interceptor_1.install; } });
34
+ /**
35
+ * Setup DevTools for Next.js
36
+ * Called from instrumentation.ts
37
+ */
38
+ async function setupDevTools(options = {}) {
39
+ const { port = 4000, installInterceptor = true } = options;
40
+ if (process.env.NODE_ENV === 'production') {
41
+ console.log('[serverreq] DevTools disabled in production');
42
+ return;
43
+ }
44
+ // Install HTTP interceptors
45
+ if (installInterceptor) {
46
+ (0, interceptor_1.install)();
47
+ }
48
+ console.log('[serverreq] DevTools initialized for Next.js');
49
+ }
50
+ var event_bus_1 = require("./devtools/event-bus");
51
+ Object.defineProperty(exports, "eventBus", { enumerable: true, get: function () { return event_bus_1.eventBus; } });
52
+ // Export SSE handler for API Routes
53
+ var sse_handler_1 = require("./devtools/sse-handler");
54
+ Object.defineProperty(exports, "createSSEHandler", { enumerable: true, get: function () { return sse_handler_1.createSSEHandler; } });
55
+ //# sourceMappingURL=nextjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../src/nextjs.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;AAeH,sCAcC;AA3BD,+CAAwC;AA8B/B,wFA9BA,qBAAO,OA8BA;AArBhB;;;GAGG;AACI,KAAK,UAAU,aAAa,CAAC,UAAwB,EAAE;IAC1D,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,kBAAkB,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE3D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO;IACX,CAAC;IAED,4BAA4B;IAC5B,IAAI,kBAAkB,EAAE,CAAC;QACrB,IAAA,qBAAO,GAAE,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;AAChE,CAAC;AAID,kDAAgD;AAAvC,qGAAA,QAAQ,OAAA;AAEjB,oCAAoC;AACpC,sDAA0D;AAAjD,+GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const interceptor_1 = require("./interceptor");
4
+ const config_1 = require("./config");
5
+ console.log('[serverreq] Preload script starting...');
6
+ try {
7
+ // Load config from environment if present
8
+ if (process.env.SERVERREQ_CONFIG) {
9
+ try {
10
+ const config = JSON.parse(process.env.SERVERREQ_CONFIG);
11
+ (0, config_1.getConfig)().merge(config);
12
+ }
13
+ catch (error) {
14
+ console.error('[serverreq] Invalid SERVERREQ_CONFIG:', error);
15
+ }
16
+ }
17
+ // Auto-install interceptor
18
+ (0, interceptor_1.install)();
19
+ }
20
+ catch (error) {
21
+ console.error('[serverreq] Failed to install interceptor:', error);
22
+ // Don't crash the application
23
+ }
24
+ //# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":";;AAAA,+CAAwC;AACxC,qCAAqC;AAErC,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACtD,IAAI,CAAC;IACD,0CAA0C;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC/B,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACxD,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,2BAA2B;IAC3B,IAAA,qBAAO,GAAE,CAAC;AACd,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;IACnE,8BAA8B;AAClC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Test script for the HTTP/HTTPS interceptor
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=test-interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-interceptor.d.ts","sourceRoot":"","sources":["../src/test-interceptor.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ /**
3
+ * Test script for the HTTP/HTTPS interceptor
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const interceptor_1 = require("./interceptor");
40
+ const https = __importStar(require("https"));
41
+ // Install the interceptor
42
+ (0, interceptor_1.install)();
43
+ console.log('Testing HTTP/HTTPS interceptor...\n');
44
+ // Test 1: fetch API
45
+ async function testFetch() {
46
+ console.log('=== Test 1: fetch API ===');
47
+ try {
48
+ const response = await fetch('https://jsonplaceholder.typicode.com/posts/1');
49
+ const data = await response.json();
50
+ console.log('Fetch successful, received data with id:', data.id);
51
+ }
52
+ catch (error) {
53
+ console.error('Fetch failed:', error);
54
+ }
55
+ }
56
+ // Test 2: https.request
57
+ function testHttpsRequest() {
58
+ console.log('\n=== Test 2: https.request ===');
59
+ return new Promise((resolve) => {
60
+ const req = https.request('https://jsonplaceholder.typicode.com/posts/1', (res) => {
61
+ let data = '';
62
+ res.on('data', (chunk) => {
63
+ data += chunk;
64
+ });
65
+ res.on('end', () => {
66
+ const parsed = JSON.parse(data);
67
+ console.log('HTTPS request successful, received data with id:', parsed.id);
68
+ resolve(null);
69
+ });
70
+ });
71
+ req.on('error', (error) => {
72
+ console.error('HTTPS request failed:', error);
73
+ resolve(null);
74
+ });
75
+ req.end();
76
+ });
77
+ }
78
+ // Test 3: POST request with body
79
+ async function testPostRequest() {
80
+ console.log('\n=== Test 3: POST request with body ===');
81
+ try {
82
+ const response = await fetch('https://jsonplaceholder.typicode.com/posts', {
83
+ method: 'POST',
84
+ headers: {
85
+ 'Content-Type': 'application/json',
86
+ 'Authorization': 'Bearer secret-token-12345',
87
+ },
88
+ body: JSON.stringify({
89
+ title: 'Test Post',
90
+ body: 'This is a test',
91
+ userId: 1,
92
+ password: 'should-be-masked',
93
+ }),
94
+ });
95
+ const data = await response.json();
96
+ console.log('POST successful, received data with id:', data.id);
97
+ }
98
+ catch (error) {
99
+ console.error('POST failed:', error);
100
+ }
101
+ }
102
+ // Run all tests
103
+ (async () => {
104
+ await testFetch();
105
+ await testHttpsRequest();
106
+ await testPostRequest();
107
+ console.log('\n=== All tests completed ===');
108
+ console.log('Check the logs above to verify request/response interception\n');
109
+ // Uninstall the interceptor
110
+ (0, interceptor_1.uninstall)();
111
+ console.log('Interceptor uninstalled');
112
+ })();
113
+ //# sourceMappingURL=test-interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-interceptor.js","sourceRoot":"","sources":["../src/test-interceptor.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "serverreq",
3
+ "version": "1.1.0",
4
+ "description": "Production-ready DevTools for intercepting HTTP/HTTPS requests in Node.js applications with React DevTools UI",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "serverreq": "dist/cli.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./devtools": {
17
+ "types": "./dist/devtools/index.d.ts",
18
+ "default": "./dist/devtools/index.js"
19
+ },
20
+ "./nextjs": {
21
+ "types": "./dist/nextjs.d.ts",
22
+ "default": "./dist/nextjs.js"
23
+ },
24
+ "./instrumentation": {
25
+ "types": "./dist/nextjs.d.ts",
26
+ "default": "./dist/nextjs.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "README.md",
33
+ "LICENSE"
34
+ ],
35
+ "scripts": {
36
+ "build": "tsc",
37
+ "build:all": "npm run build",
38
+ "dev": "tsc --watch",
39
+ "prepublishOnly": "npm run build:all",
40
+ "clean": "rmdir /s /q dist 2>nul || rm -rf dist",
41
+ "test": "node test-app.js"
42
+ },
43
+ "keywords": [
44
+ "http",
45
+ "https",
46
+ "fetch",
47
+ "interceptor",
48
+ "request",
49
+ "logging",
50
+ "debugging",
51
+ "cli",
52
+ "nodejs",
53
+ "nextjs",
54
+ "devtools",
55
+ "react",
56
+ "socket.io"
57
+ ],
58
+ "repository": {
59
+ "type": "git",
60
+ "url": "git+https://github.com/AhmedNnasser11/serverreq.git"
61
+ },
62
+ "homepage": "https://github.com/AhmedNnasser11/serverreq#readme",
63
+ "bugs": {
64
+ "url": "https://github.com/AhmedNnasser11/serverreq/issues"
65
+ },
66
+ "author": "ServerReq",
67
+ "license": "MIT",
68
+ "engines": {
69
+ "node": ">=18.0.0"
70
+ },
71
+ "peerDependencies": {
72
+ "react": ">=18.0.0",
73
+ "react-dom": ">=18.0.0"
74
+ },
75
+ "peerDependenciesMeta": {
76
+ "react": {
77
+ "optional": true
78
+ },
79
+ "react-dom": {
80
+ "optional": true
81
+ }
82
+ },
83
+ "devDependencies": {
84
+ "@types/node": "^18.0.0",
85
+ "@types/react": "^19.2.10",
86
+ "@types/react-dom": "^19.2.3",
87
+ "next": "^16.1.6",
88
+ "typescript": "^5.3.0"
89
+ },
90
+ "dependencies": {
91
+ "socket.io": "^4.8.3",
92
+ "socket.io-client": "^4.8.3"
93
+ }
94
+ }