Skip to content

Deno-deployed exit_node.ts returns HTML instead of JSON #1312

@seldontrantor

Description

@seldontrantor

Summary

I deployed assets/exit_node/exit_node.ts with Deno and configured it as the exit node, but the relay fails because the exit-node response is not valid JSON. Instead, the endpoint returns an HTML page saying the script completed but did not return anything.

Issue

I deployed assets/exit_node/exit_node.ts on Deno Deploy.

When I open the Deno URL directly in browser, it works and returns JSON:

{"e":"method_not_allowed"}

So the Deno handler is active.

But when using it from mhrv-rs, the app still logs:

2026-05-19T17:02:01.247344Z  INFO relay GET https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/turnstile/f/ov2/av0/rch/emotq/0x4AAAAAAADnPIDROrmt1Wwj/light/fbE/new/normal?lang=auto
2026-05-19T17:02:01.604648Z  WARN exit node failed for https://chatgpt.com/favicon.ico: relay error: exit-node response not valid JSON (expected value at line 1 column 1): <!DOCTYPE html><html><head><title>Web App</title></head><body><p>The script completed but did not return anything.</p></body></html> — falling back to direct Apps Script
2026-05-19T17:02:03.543215Z  INFO relay GET https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/cmg/1
2026-05-19T17:02:04.167860Z  INFO dispatch challenges.cloudflare.com:443 -> MITM + Apps Script relay (TLS detected)
2026-05-19T17:02:04.168019Z  INFO MITM TLS -> challenges.cloudflare.com:443 (socks_host=challenges.cloudflare.com, sni=challenges.cloudflare.com)
2026-05-19T17:02:04.171470Z  INFO relay POST https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/g/flow/ov1/747232803:1779206941:eWp5dQ9HD4afoMoGrg7KVTXCfshPEPzzE4jwLyX7sk4/9fe4a96658ff9a3a/UAkPQGwNtXYk3Q7iHtl3JGKN2W7Tq7wvPKqtWYTPGYc-1779210066-1.2.1.1-jMy_Rh5MyVZ6yya8EcJLcvOC2fIugK9r9uOdaDy8ZDfBeFji._cJkv3OxPx1KPn6

So mhrv-rs fails with:

exit-node response not valid JSON
exit-node response not valid JSON: <!DOCTYPE html><html><head><title>Web App</title></head><body><p>The script completed but did not return anything.</p></body></html>

Expected

Since the Deno endpoint returns JSON directly, mhrv-rs should receive JSON from the exit node.

Actual

mhrv-rs receives the Apps Script-style HTML page instead and falls back to direct Apps Script.

Question

Is the exit node request maybe going to the wrong URL, or is Apps Script still being used instead of the Deno exit node?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions