@graphty/remote-logger 1.2.2 → 1.3.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 (84) hide show
  1. package/README.md +53 -2
  2. package/dist/bundle/browser-entry.d.ts +34 -0
  3. package/dist/bundle/browser-entry.d.ts.map +1 -0
  4. package/dist/bundle/browser-entry.js +129 -0
  5. package/dist/bundle/browser-entry.js.map +1 -0
  6. package/dist/client/RemoteLogClient.d.ts +2 -1
  7. package/dist/client/RemoteLogClient.d.ts.map +1 -1
  8. package/dist/client/RemoteLogClient.js +20 -10
  9. package/dist/client/RemoteLogClient.js.map +1 -1
  10. package/dist/client/types.d.ts +6 -0
  11. package/dist/client/types.d.ts.map +1 -1
  12. package/dist/mcp/index.d.ts +1 -1
  13. package/dist/mcp/index.d.ts.map +1 -1
  14. package/dist/mcp/index.js +20 -1
  15. package/dist/mcp/index.js.map +1 -1
  16. package/dist/mcp/mcp-server.d.ts +5 -0
  17. package/dist/mcp/mcp-server.d.ts.map +1 -1
  18. package/dist/mcp/mcp-server.js +54 -8
  19. package/dist/mcp/mcp-server.js.map +1 -1
  20. package/dist/mcp/tools/index.d.ts +6 -6
  21. package/dist/mcp/tools/index.d.ts.map +1 -1
  22. package/dist/mcp/tools/index.js +1 -1
  23. package/dist/mcp/tools/index.js.map +1 -1
  24. package/dist/mcp/tools/logs-clear.d.ts +1 -2
  25. package/dist/mcp/tools/logs-clear.d.ts.map +1 -1
  26. package/dist/mcp/tools/logs-get-all.d.ts +1 -2
  27. package/dist/mcp/tools/logs-get-all.d.ts.map +1 -1
  28. package/dist/mcp/tools/logs-get-errors.d.ts +1 -2
  29. package/dist/mcp/tools/logs-get-errors.d.ts.map +1 -1
  30. package/dist/mcp/tools/logs-get-file-path.d.ts +8 -2
  31. package/dist/mcp/tools/logs-get-file-path.d.ts.map +1 -1
  32. package/dist/mcp/tools/logs-get-file-path.js +1 -1
  33. package/dist/mcp/tools/logs-get-file-path.js.map +1 -1
  34. package/dist/mcp/tools/logs-receive.d.ts +9 -10
  35. package/dist/mcp/tools/logs-receive.d.ts.map +1 -1
  36. package/dist/mcp/tools/logs-search.d.ts +1 -2
  37. package/dist/mcp/tools/logs-search.d.ts.map +1 -1
  38. package/dist/mcp/tools/logs-status.d.ts.map +1 -1
  39. package/dist/mcp/tools/logs-status.js +4 -1
  40. package/dist/mcp/tools/logs-status.js.map +1 -1
  41. package/dist/remote-logger.browser.js +166 -0
  42. package/dist/remote-logger.browser.js.map +1 -0
  43. package/dist/server/dual-server.d.ts +7 -4
  44. package/dist/server/dual-server.d.ts.map +1 -1
  45. package/dist/server/dual-server.js +124 -50
  46. package/dist/server/dual-server.js.map +1 -1
  47. package/dist/server/log-server.d.ts +12 -2
  48. package/dist/server/log-server.d.ts.map +1 -1
  49. package/dist/server/log-server.js +109 -63
  50. package/dist/server/log-server.js.map +1 -1
  51. package/dist/server/log-storage.d.ts +4 -0
  52. package/dist/server/log-storage.d.ts.map +1 -1
  53. package/dist/server/log-storage.js.map +1 -1
  54. package/dist/server/proxy.d.ts +39 -0
  55. package/dist/server/proxy.d.ts.map +1 -0
  56. package/dist/server/proxy.js +290 -0
  57. package/dist/server/proxy.js.map +1 -0
  58. package/dist/server/self-signed-cert.d.ts +9 -0
  59. package/dist/server/self-signed-cert.d.ts.map +1 -1
  60. package/dist/server/self-signed-cert.js +9 -0
  61. package/dist/server/self-signed-cert.js.map +1 -1
  62. package/dist/ui/ConsoleCaptureUI.d.ts.map +1 -1
  63. package/dist/ui/ConsoleCaptureUI.js +6 -1
  64. package/dist/ui/ConsoleCaptureUI.js.map +1 -1
  65. package/package.json +7 -2
  66. package/src/bundle/browser-entry.ts +157 -0
  67. package/src/client/RemoteLogClient.ts +22 -11
  68. package/src/client/types.ts +6 -0
  69. package/src/mcp/index.ts +42 -0
  70. package/src/mcp/mcp-server.ts +54 -8
  71. package/src/mcp/tools/index.ts +7 -0
  72. package/src/mcp/tools/logs-clear.ts +1 -1
  73. package/src/mcp/tools/logs-get-all.ts +1 -1
  74. package/src/mcp/tools/logs-get-errors.ts +1 -1
  75. package/src/mcp/tools/logs-get-file-path.ts +2 -2
  76. package/src/mcp/tools/logs-receive.ts +1 -1
  77. package/src/mcp/tools/logs-search.ts +1 -1
  78. package/src/mcp/tools/logs-status.ts +4 -1
  79. package/src/server/dual-server.ts +165 -57
  80. package/src/server/log-server.ts +126 -68
  81. package/src/server/log-storage.ts +4 -0
  82. package/src/server/proxy.ts +357 -0
  83. package/src/server/self-signed-cert.ts +9 -0
  84. package/src/ui/ConsoleCaptureUI.ts +6 -1
@@ -6,8 +6,8 @@
6
6
  * @module server/dual-server
7
7
  */
8
8
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
- import type * as http from "http";
10
- import type * as https from "https";
9
+ import * as http from "http";
10
+ import * as https from "https";
11
11
  import { JsonlWriter } from "./jsonl-writer.js";
12
12
  import { LogStorage } from "./log-storage.js";
13
13
  /**
@@ -16,17 +16,18 @@ import { LogStorage } from "./log-storage.js";
16
16
  * @param basePort - Starting port number
17
17
  * @param host - Host to bind to
18
18
  * @param quiet - Suppress output messages
19
+ * @param maxPort - Maximum port number to scan up to (default: 9099)
19
20
  * @returns Promise resolving to available port number
20
21
  * @throws Error if no available port found within MAX_PORT_SCAN_ATTEMPTS
21
22
  */
22
- export declare function findAvailablePort(basePort: number, host: string, quiet?: boolean): Promise<number>;
23
+ export declare function findAvailablePort(basePort: number, host: string, quiet?: boolean, maxPort?: number): Promise<number>;
23
24
  /**
24
25
  * Options for creating a dual server.
25
26
  */
26
27
  export interface DualServerOptions {
27
28
  /** Port for HTTP server (default: 9080) */
28
29
  httpPort?: number;
29
- /** Host for HTTP server (default: localhost) */
30
+ /** Host for HTTP server (default: 0.0.0.0) */
30
31
  httpHost?: string;
31
32
  /** Enable MCP server (default: true) */
32
33
  mcpEnabled?: boolean;
@@ -46,6 +47,8 @@ export interface DualServerOptions {
46
47
  jsonlWriter?: JsonlWriter;
47
48
  /** Only serve /log POST and /health GET endpoints (default: false) */
48
49
  logReceiveOnly?: boolean;
50
+ /** Maximum port number to scan up to (default: 9099) */
51
+ maxPortNumber?: number;
49
52
  }
50
53
  /**
51
54
  * Result of creating a dual server.
@@ -1 +1 @@
1
- {"version":3,"file":"dual-server.d.ts","sourceRoot":"","sources":["../../src/server/dual-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,KAAK,IAAI,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAMpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAiD/D;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA0C/G;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iFAAiF;IACjF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,qDAAqD;IACrD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACxC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kCAAkC;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyJjG"}
1
+ {"version":3,"file":"dual-server.d.ts","sourceRoot":"","sources":["../../src/server/dual-server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAsI/D;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,OAAe,EACtB,OAAO,GAAE,MAAwB,GAClC,OAAO,CAAC,MAAM,CAAC,CA0CjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iFAAiF;IACjF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,qDAAqD;IACrD,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACxC,0CAA0C;IAC1C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kCAAkC;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,4BAA4B;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuKjG"}
@@ -6,13 +6,15 @@
6
6
  * @module server/dual-server
7
7
  */
8
8
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
9
+ import { internalIpV4Sync } from "internal-ip";
9
10
  import * as net from "net";
10
11
  import * as os from "os";
11
12
  import * as path from "path";
12
13
  import { createMcpServer } from "../mcp/mcp-server.js";
13
14
  import { JsonlWriter } from "./jsonl-writer.js";
14
- import { createLogServer } from "./log-server.js";
15
+ import { createLogServer, setProxy } from "./log-server.js";
15
16
  import { LogStorage } from "./log-storage.js";
17
+ import { createProxy } from "./proxy.js";
16
18
  import { certFilesExist } from "./self-signed-cert.js";
17
19
  // ANSI color codes for terminal output
18
20
  const colors = {
@@ -26,6 +28,72 @@ const colors = {
26
28
  const MAX_PORT_SCAN_ATTEMPTS = 100;
27
29
  /** Maximum port number allowed (ports 9000-9099 per project guidelines) */
28
30
  const MAX_PORT_NUMBER = 9099;
31
+ /** Maximum retries for binding after EADDRINUSE during listen */
32
+ const MAX_BIND_RETRIES = 10;
33
+ /**
34
+ * Attempt to bind an HTTP/HTTPS server to a port with retry on EADDRINUSE.
35
+ * This handles race conditions where a port becomes unavailable between
36
+ * port scanning and actual binding.
37
+ * @param serverFactory - Function to create a new server instance
38
+ * @param startPort - Starting port to try
39
+ * @param host - Host to bind to
40
+ * @param quiet - Suppress output messages
41
+ * @param maxPort - Maximum port number to scan up to (default: 9099)
42
+ * @returns Promise resolving to bound server and actual port
43
+ */
44
+ async function tryBindWithRetry(serverFactory, startPort, host, quiet, maxPort = MAX_PORT_NUMBER) {
45
+ let port = startPort;
46
+ let attempts = 0;
47
+ while (attempts < MAX_BIND_RETRIES) {
48
+ if (port > maxPort) {
49
+ break;
50
+ }
51
+ const server = serverFactory();
52
+ try {
53
+ await new Promise((resolve, reject) => {
54
+ const errorHandler = (err) => {
55
+ if (err.code === "EADDRINUSE") {
56
+ if (!quiet) {
57
+ // eslint-disable-next-line no-console
58
+ console.log(`${colors.yellow}Port ${port} claimed during bind, trying ${port + 1}...${colors.reset}`);
59
+ }
60
+ reject(err);
61
+ }
62
+ else {
63
+ reject(err);
64
+ }
65
+ };
66
+ server.once("error", errorHandler);
67
+ server.listen({ port, host, exclusive: false }, () => {
68
+ server.removeListener("error", errorHandler);
69
+ resolve();
70
+ });
71
+ });
72
+ // Success - server is bound
73
+ if (!quiet) {
74
+ // eslint-disable-next-line no-console
75
+ console.log(`${colors.green}HTTP server listening on ${host}:${port}${colors.reset}`);
76
+ }
77
+ return { server, port };
78
+ }
79
+ catch (err) {
80
+ if (err.code === "EADDRINUSE") {
81
+ port++;
82
+ attempts++;
83
+ continue;
84
+ }
85
+ // Re-throw non-EADDRINUSE errors
86
+ throw err;
87
+ }
88
+ }
89
+ // Exhausted retries
90
+ const errorMsg = `Could not bind to any port after ${attempts} attempts. ` +
91
+ `Ports ${startPort}-${port - 1} are all in use or were claimed during bind.`;
92
+ if (!quiet) {
93
+ console.error(`${colors.red}${errorMsg}${colors.reset}`);
94
+ }
95
+ throw new Error(errorMsg);
96
+ }
29
97
  /**
30
98
  * Check if a port is available for binding.
31
99
  * @param port - Port number to check
@@ -60,15 +128,16 @@ async function isPortAvailable(port, host) {
60
128
  * @param basePort - Starting port number
61
129
  * @param host - Host to bind to
62
130
  * @param quiet - Suppress output messages
131
+ * @param maxPort - Maximum port number to scan up to (default: 9099)
63
132
  * @returns Promise resolving to available port number
64
133
  * @throws Error if no available port found within MAX_PORT_SCAN_ATTEMPTS
65
134
  */
66
- export async function findAvailablePort(basePort, host, quiet = false) {
135
+ export async function findAvailablePort(basePort, host, quiet = false, maxPort = MAX_PORT_NUMBER) {
67
136
  let port = basePort;
68
137
  let attempts = 0;
69
138
  while (attempts < MAX_PORT_SCAN_ATTEMPTS) {
70
- if (port > MAX_PORT_NUMBER) {
71
- // Wrap around if we exceed max port (shouldn't happen normally)
139
+ if (port > maxPort) {
140
+ // Stop if we exceed max port
72
141
  break;
73
142
  }
74
143
  if (await isPortAvailable(port, host)) {
@@ -86,8 +155,8 @@ export async function findAvailablePort(basePort, host, quiet = false) {
86
155
  attempts++;
87
156
  }
88
157
  // No available port found
89
- const errorMsg = `Could not find available port after ${MAX_PORT_SCAN_ATTEMPTS} attempts starting from ${basePort}. ` +
90
- `Ports ${basePort}-${port - 1} are all in use. ` +
158
+ const errorMsg = `Could not find available port after ${attempts} attempts starting from ${basePort}. ` +
159
+ `Ports ${basePort}-${Math.min(port - 1, maxPort)} are all in use. ` +
91
160
  `Try killing existing processes: pkill -f "remote-log-server"`;
92
161
  if (!quiet) {
93
162
  console.error(`${colors.red}${errorMsg}${colors.reset}`);
@@ -103,7 +172,7 @@ export async function findAvailablePort(basePort, host, quiet = false) {
103
172
  * @returns Promise resolving to the dual server result
104
173
  */
105
174
  export async function createDualServer(options = {}) {
106
- const { httpPort: requestedPort = 9080, httpHost = "localhost", mcpEnabled = true, httpEnabled = true, quiet = false, storage: externalStorage, jsonlWriter: externalJsonlWriter, logReceiveOnly = false, certPath, keyPath, } = options;
175
+ const { httpPort: requestedPort = 9080, httpHost = "0.0.0.0", mcpEnabled = true, httpEnabled = true, quiet = false, storage: externalStorage, jsonlWriter: externalJsonlWriter, logReceiveOnly = false, certPath, keyPath, maxPortNumber = MAX_PORT_NUMBER, } = options;
107
176
  // Create or use provided JSONL writer
108
177
  const jsonlBaseDir = path.join(os.tmpdir(), "remote-logger");
109
178
  const jsonlWriter = externalJsonlWriter ?? new JsonlWriter(jsonlBaseDir);
@@ -112,22 +181,29 @@ export async function createDualServer(options = {}) {
112
181
  let httpServer;
113
182
  let mcpServer;
114
183
  let actualHttpPort;
184
+ let proxyInstance;
115
185
  // Track active connections for graceful shutdown
116
186
  const activeConnections = new Set();
117
187
  // Start HTTP server if enabled
118
188
  if (httpEnabled) {
119
189
  // Find an available port starting from the requested port
120
- actualHttpPort = await findAvailablePort(requestedPort, httpHost, quiet);
121
- const result = createLogServer({
122
- port: actualHttpPort,
123
- host: httpHost,
124
- storage,
125
- quiet,
126
- logReceiveOnly,
127
- certPath,
128
- keyPath,
129
- });
130
- httpServer = result.server;
190
+ const startPort = await findAvailablePort(requestedPort, httpHost, quiet, maxPortNumber);
191
+ // Factory function to create server instances (for retry on bind failure)
192
+ const createServerInstance = () => {
193
+ return createLogServer({
194
+ port: startPort, // Port is set but not used until bind
195
+ host: httpHost,
196
+ storage,
197
+ quiet: true, // Quiet during factory, messages handled by tryBindWithRetry
198
+ logReceiveOnly,
199
+ certPath,
200
+ keyPath,
201
+ }).server;
202
+ };
203
+ // Bind with retry logic to handle race conditions
204
+ const bindResult = await tryBindWithRetry(createServerInstance, startPort, httpHost, quiet, maxPortNumber);
205
+ httpServer = bindResult.server;
206
+ actualHttpPort = bindResult.port;
131
207
  // Track connections for graceful shutdown
132
208
  httpServer.on("connection", (socket) => {
133
209
  activeConnections.add(socket);
@@ -135,37 +211,8 @@ export async function createDualServer(options = {}) {
135
211
  activeConnections.delete(socket);
136
212
  });
137
213
  });
138
- // Set short keep-alive timeout for tests (connections close faster)
139
- httpServer.keepAliveTimeout = 1000;
140
- httpServer.headersTimeout = 2000;
141
- // Wait for HTTP server to be listening
142
- const serverToStart = httpServer;
143
- const portToUse = actualHttpPort;
144
- await new Promise((resolve, reject) => {
145
- serverToStart.on("error", (err) => {
146
- // Provide helpful error message for port conflicts
147
- if (err.code === "EADDRINUSE") {
148
- const errorMsg = `Port ${portToUse} is already in use. ` +
149
- `This shouldn't happen after port scanning - there may be a race condition. ` +
150
- `Try again or kill existing processes: pkill -f "remote-log-server"`;
151
- if (!quiet) {
152
- console.error(`${colors.red}${errorMsg}${colors.reset}`);
153
- }
154
- reject(new Error(errorMsg));
155
- }
156
- else {
157
- reject(err);
158
- }
159
- });
160
- serverToStart.listen({ port: portToUse, host: httpHost, exclusive: false }, () => {
161
- serverToStart.removeListener("error", reject);
162
- if (!quiet) {
163
- // eslint-disable-next-line no-console
164
- console.log(`${colors.green}HTTP server listening on ${httpHost}:${portToUse}${colors.reset}`);
165
- }
166
- resolve();
167
- });
168
- });
214
+ httpServer.keepAliveTimeout = 30000;
215
+ httpServer.headersTimeout = 35000;
169
216
  // Set server config in storage so MCP tools can report it
170
217
  // Determine protocol based on whether valid cert files were provided
171
218
  const useHttps = certPath && keyPath && certFilesExist(certPath, keyPath);
@@ -181,13 +228,36 @@ export async function createDualServer(options = {}) {
181
228
  else {
182
229
  mode = "dual";
183
230
  }
231
+ // When bound to all interfaces (0.0.0.0), detect the machine's IP address
232
+ // for the endpoint URL since 0.0.0.0 is not a routable address for clients
233
+ let endpointHost = httpHost;
234
+ if (httpHost === "0.0.0.0") {
235
+ const internalIp = internalIpV4Sync();
236
+ if (internalIp) {
237
+ endpointHost = internalIp;
238
+ }
239
+ else {
240
+ // Fallback for local-only use - don't use hostname as it may not resolve
241
+ endpointHost = "127.0.0.1";
242
+ if (!quiet) {
243
+ console.warn(`${colors.yellow}Could not detect LAN IP. Endpoint URL will only work locally.${colors.reset}`);
244
+ }
245
+ }
246
+ }
247
+ const scriptUrl = `${protocol}://${endpointHost}:${actualHttpPort}/remote-logger.js`;
248
+ const proxyBaseUrl = `/proxy/`;
184
249
  storage.setServerConfig({
185
250
  httpPort: actualHttpPort,
186
251
  httpHost,
187
252
  protocol,
188
- httpEndpoint: `${protocol}://${httpHost}:${actualHttpPort}/log`,
253
+ httpEndpoint: `${protocol}://${endpointHost}:${actualHttpPort}/log`,
254
+ scriptUrl,
255
+ proxyBaseUrl: `${protocol}://${endpointHost}:${actualHttpPort}${proxyBaseUrl}`,
189
256
  mode,
190
257
  });
258
+ // Create and register the proxy instance
259
+ proxyInstance = createProxy(proxyBaseUrl, quiet);
260
+ setProxy(proxyInstance);
191
261
  }
192
262
  // Create and connect MCP server if enabled
193
263
  if (mcpEnabled) {
@@ -210,6 +280,10 @@ export async function createDualServer(options = {}) {
210
280
  httpServer.close(() => { resolve(); });
211
281
  });
212
282
  }
283
+ // Close proxy
284
+ if (proxyInstance) {
285
+ proxyInstance.close();
286
+ }
213
287
  // Close JSONL writer only if we created it internally
214
288
  if (ownsJsonlWriter) {
215
289
  await jsonlWriter.close();
@@ -1 +1 @@
1
- {"version":3,"file":"dual-server.js","sourceRoot":"","sources":["../../src/server/dual-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dual-server.js","sourceRoot":"","sources":["../../src/server/dual-server.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ import * as http from "http";
16
16
  import * as https from "https";
17
17
  import { JsonlWriter } from "./jsonl-writer.js";
18
18
  import { LogStorage } from "./log-storage.js";
19
+ import type { ProxyInstance } from "./proxy.js";
19
20
  /**
20
21
  * Get the shared LogStorage instance, creating it if needed.
21
22
  * Creates a JsonlWriter for JSONL file streaming by default.
@@ -32,10 +33,19 @@ export declare function getJsonlWriter(): JsonlWriter | null;
32
33
  * @param storage - The LogStorage instance to use
33
34
  */
34
35
  export declare function setLogStorage(storage: LogStorage): void;
36
+ /**
37
+ * Set the shared proxy instance.
38
+ * @param proxy - The proxy instance to use
39
+ */
40
+ export declare function setProxy(proxy: ProxyInstance): void;
41
+ /**
42
+ * Reset the browser bundle cache. Used for testing.
43
+ */
44
+ export declare function resetBrowserBundleCache(): void;
35
45
  export interface LogServerOptions {
36
46
  /** Port to listen on (default: 9080) */
37
47
  port?: number;
38
- /** Hostname to bind to (default: localhost) */
48
+ /** Hostname to bind to (default: 0.0.0.0) */
39
49
  host?: string;
40
50
  /** Path to SSL certificate file (HTTPS only used if both certPath and keyPath provided) */
41
51
  certPath?: string;
@@ -100,7 +110,7 @@ export declare function startLogServer(options?: LogServerOptions): http.Server
100
110
  /**
101
111
  * Help text displayed when --help is passed.
102
112
  */
103
- export declare const HELP_TEXT = "\nRemote Log Server - Remote logging for browser debugging\n\nUsage:\n npx remote-log-server [options]\n npx @graphty/remote-logger [options]\n\nOptions:\n --port, -p <port> Port to listen on (default: 9080)\n --host, -h <host> Hostname to bind to (default: localhost)\n --cert, -c <path> Path to SSL certificate file (enables HTTPS)\n --key, -k <path> Path to SSL private key file (enables HTTPS)\n --log-file, -l <path> Write logs to file\n --mcp-only Start only MCP server (no HTTP)\n --http-only Start only HTTP server (legacy mode)\n --mcp Alias for --mcp-only (deprecated)\n --quiet, -q Suppress startup banner\n --help Show this help message\n\nProtocol:\n HTTP is used by default. To use HTTPS, provide both --cert and --key.\n\nModes:\n Default (no flags) Dual mode: HTTP + MCP running together\n --mcp-only MCP only: For Claude Code integration\n --http-only HTTP only: Legacy mode for browser debugging\n\nExamples:\n npx remote-log-server # Start dual mode (HTTP + MCP)\n npx remote-log-server --port 9085 # Custom port\n npx remote-log-server --mcp-only # MCP server only (for Claude Code)\n npx remote-log-server --http-only # HTTP server only (legacy)\n npx remote-log-server --cert cert.crt --key key.key # Use HTTPS with custom certs\n npx remote-log-server --log-file ./tmp/logs.jsonl # Also write to file\n";
113
+ export declare const HELP_TEXT = "\nRemote Log Server - Remote logging for browser debugging\n\nUsage:\n npx remote-log-server [options]\n npx @graphty/remote-logger [options]\n\nOptions:\n --port, -p <port> Port to listen on (default: 9080)\n --host, -h <host> Hostname to bind to (default: 0.0.0.0)\n --cert, -c <path> Path to SSL certificate file (enables HTTPS)\n --key, -k <path> Path to SSL private key file (enables HTTPS)\n --log-file, -l <path> Write logs to file\n --mcp-only Start only MCP server (no HTTP)\n --http-only Start only HTTP server (legacy mode)\n --mcp Alias for --mcp-only (deprecated)\n --quiet, -q Suppress startup banner\n --help Show this help message\n\nProtocol:\n HTTP is used by default. To use HTTPS, provide both --cert and --key.\n\nModes:\n Default (no flags) Dual mode: HTTP + MCP running together\n --mcp-only MCP only: For Claude Code integration\n --http-only HTTP only: Legacy mode for browser debugging\n\nExamples:\n npx remote-log-server # Start dual mode (HTTP + MCP)\n npx remote-log-server --port 9085 # Custom port\n npx remote-log-server --mcp-only # MCP server only (for Claude Code)\n npx remote-log-server --http-only # HTTP server only (legacy)\n npx remote-log-server --cert cert.crt --key key.key # Use HTTPS with custom certs\n npx remote-log-server --log-file ./tmp/logs.jsonl # Also write to file\n";
104
114
  /**
105
115
  * Result of parsing command line arguments.
106
116
  */
@@ -1 +1 @@
1
- {"version":3,"file":"log-server.d.ts","sourceRoot":"","sources":["../../src/server/log-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAiB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQ7D;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAU1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAEvD;AAkBD,MAAM,WAAW,gBAAgB;IAC7B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAqRD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,4DAA4D;IAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAsCtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAkEzF;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,siDAkCrB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,wCAAwC;IACxC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAuDzD;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAoG1C"}
1
+ {"version":3,"file":"log-server.d.ts","sourceRoot":"","sources":["../../src/server/log-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAiB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAU1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAEvD;AAKD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAEnD;AAiCD;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAkBD,MAAM,WAAW,gBAAgB;IAC7B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAGD,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAsTD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,UAAU,CAAC;IACpB,gDAAgD;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,4DAA4D;IAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,CAsCtF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,gBAAqB,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAkEzF;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,oiDAkCrB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,wCAAwC;IACxC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAuDzD;AAED;;GAEG;AACH,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CA2E1C"}