From a3c157d8191ba406ed69bdb48d4b3c9d679419f4 Mon Sep 17 00:00:00 2001 From: Sumihiro Ueda Date: Mon, 20 Oct 2025 10:22:02 +0900 Subject: [PATCH 1/4] Set default port for target URL in ngrok proxy Set default port for target URL in ngrok proxy - ensure targetUrl.port falls back to 80 or 443 based on scheme so listener.forward always receives a valid host:port pair - prevents ngrok from labeling the tunnel as app://... and avoids ERR_NGROK_3004 when the user omits the port in --url --- src/serve/proxy/ngrok-proxy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serve/proxy/ngrok-proxy.ts b/src/serve/proxy/ngrok-proxy.ts index fb6659c..70e7012 100644 --- a/src/serve/proxy/ngrok-proxy.ts +++ b/src/serve/proxy/ngrok-proxy.ts @@ -8,7 +8,7 @@ export class NgrokProxy implements ProxyInterface { constructor() {} async connect(targetUrl: URL): Promise { - const targetPort = targetUrl.port; + const targetPort = targetUrl.port || (targetUrl.protocol === "https:" ? "443" : "80"); const targetHost = targetUrl.hostname; if (!process.env.NGROK_AUTHTOKEN) { From 91b56d84b7348b3961794022daa9d31b5d9dcfc5 Mon Sep 17 00:00:00 2001 From: Sumihiro Ueda Date: Mon, 20 Oct 2025 10:24:16 +0900 Subject: [PATCH 2/4] Enhance URL construction in ngrok-proxy Modify URL handling to include pathname and search parameters. --- src/serve/proxy/ngrok-proxy.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/serve/proxy/ngrok-proxy.ts b/src/serve/proxy/ngrok-proxy.ts index 70e7012..69ff9f5 100644 --- a/src/serve/proxy/ngrok-proxy.ts +++ b/src/serve/proxy/ngrok-proxy.ts @@ -36,7 +36,10 @@ export class NgrokProxy implements ProxyInterface { listener.forward(`${targetHost}:${targetPort}`); - return new URL(url); + const urlWithPath = new URL(url); + urlWithPath.pathname = targetUrl.pathname; + urlWithPath.search = targetUrl.search; + return urlWithPath; } async cleanup(): Promise { From 10238aa75d924b3d4e06df668fb1439c199622cb Mon Sep 17 00:00:00 2001 From: Sumihiro Ueda Date: Tue, 4 Nov 2025 10:05:29 +0900 Subject: [PATCH 3/4] Add hash to URL in ngrok-proxy --- src/serve/proxy/ngrok-proxy.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/serve/proxy/ngrok-proxy.ts b/src/serve/proxy/ngrok-proxy.ts index 69ff9f5..d954a0f 100644 --- a/src/serve/proxy/ngrok-proxy.ts +++ b/src/serve/proxy/ngrok-proxy.ts @@ -39,6 +39,7 @@ export class NgrokProxy implements ProxyInterface { const urlWithPath = new URL(url); urlWithPath.pathname = targetUrl.pathname; urlWithPath.search = targetUrl.search; + urlWithPath.hash = targetUrl.hash; return urlWithPath; } From d0d4cbafaa06b111298dd866a110b64813b4c482 Mon Sep 17 00:00:00 2001 From: sumihiro Date: Tue, 4 Nov 2025 16:36:06 +0900 Subject: [PATCH 4/4] fix code style issues --- src/serve/proxy/ngrok-proxy.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/serve/proxy/ngrok-proxy.ts b/src/serve/proxy/ngrok-proxy.ts index d954a0f..60fa91b 100644 --- a/src/serve/proxy/ngrok-proxy.ts +++ b/src/serve/proxy/ngrok-proxy.ts @@ -8,7 +8,8 @@ export class NgrokProxy implements ProxyInterface { constructor() {} async connect(targetUrl: URL): Promise { - const targetPort = targetUrl.port || (targetUrl.protocol === "https:" ? "443" : "80"); + const targetPort = + targetUrl.port || (targetUrl.protocol === "https:" ? "443" : "80"); const targetHost = targetUrl.hostname; if (!process.env.NGROK_AUTHTOKEN) {