Skip to content

Deno deploy and Encoding error 'GET net::ERR_CONTENT_DECODING_FAILED 200 (OK)' #1239

Description

@Netman82

This is my config.json after deploying to Deno with the newest version of exit_node (successful deploy with no errors):

{
  "mode": "apps_script",
  "google_ip": "216.239.38.120",
  "front_domain": "www.google.com",
  "script_id": [
    "...Vvvq-...",
    "...Dp7TX...",
    "...zII2Z...",
    "...E_LAq..."
  ],
  "auth_key": "...$xVq2@...",
  "listen_host": "0.0.0.0",
  "listen_port": 8085,
  "socks5_port": 8086,
  "log_level": "info",
  "verify_ssl": true,
  "sni_hosts": [
    "www.google.com",
    "mail.google.com",
    "accounts.google.com"
  ],
  "normalize_x_graphql": true,
  "youtube_via_relay": true,
  "max_ips_to_scan": 100,
  "scan_batch_size": 500,
  "google_ip_validation": true,
  "tunnel_doh": true,
  "exit_node": {
    "enabled": true,
    "relay_url": "https://...deno...",
    "psk": "...nj66...",
    "mode": "selective",
    "hosts": [
      "chatgpt.com",
      "claude.ai",
      "x.com",
      "grok.com",
      "zonegfx.com",
      "aistudio.google.com"
    ]
  }
}

This is report of the deploy in the Playground in Deno:
Image

But when I check domains in 'hosts' section, either they still couldn't be opened or I get a blank screen and 'GET https://chatgpt.com/ net::ERR_CONTENT_DECODING_FAILED 200 (OK)' error in console

Activity

  1. dazzling-no-more commented on May 17, 2026

    @dazzling-no-more
    Contributor

    Can you test this release on this fork? I solved the issue there.
    https://github.com/dazzling-no-more/rahgozar/releases/tag/v2.0.2

  2. Netman82 commented on May 17, 2026

    @Netman82
    Author

    Can you test this release on this fork? I solved the issue there. https://github.com/dazzling-no-more/rahgozar/releases/tag/v2.0.2

    Still the same. it's been like 40 mins I'm trying this. re-deployed on deno with a new Playground name and URL. updated exit-node.ts on the system and also config.json in %appdata% folder.

    In deno browsing the generated URl gives: "The script completed but did not return anything." is this correct? what should I do?

    Sample output on the browser:

    {"s":200,"h":{"cache-control":"no-cache, private, must-revalidate, pre-check=0, post-check=0","cf-cache-status":"DYNAMIC","cf-ray":"9fd5feda18b20b6a-AMS","content-security-policy":"connect-src 'self' blob: https://fonts.googleapis.com/css https://mapsresources-pa.googleapis.com https://maps.googleapis.com https://translate.googleapis.com https://www.gstatic.com/maps/ https://*.pscp.tv https://*.twimg.com https://*.video.pscp.tv https://*.watch.x.com https://aa.twitter.com https://aa.x.com https://accounts.google.com/gsi/ https://ads-api.twitter.com https://ads-api.x.com https://api-stream.twitter.com https://api-stream.x.com https://api.twitter.com https://api.x.ai https://api.x.com https://api.x.com https://caps.twitter.com https://caps.x.com https://grok.x.com https://jf.twitter.com https://jf.x.com https://jf-t.x.com https://pay.twitter.com https://pay.x.com https://sentry.io https://ton-staging.atla.twitter.com https://ton-staging.atla.x.com https://ton-staging.pdxa.twitter.com https://ton-staging.pdxa.x.com https://ton.twitter.com https://ton.local.twitter.com https://ton.x.com https://twitter.com https://upload.twitter.com https://upload.x.com https://www.google-analytics.com https://x.com https://grok-api.gcp.mouseion.dev https://assets.mouseion.dev https://grok.com https://assets.grok.com https://imagine-public.x.ai/ wss://grok.com wss://grok-api.gcp.mouseion.dev https://*.adtrafficquality.google https://*.googlesyndication.com https://*.doubleclick.net https://adservice.google.com https://www.googleadservices.com https://pagead2.googlesyndication.com https://www.google.com https://google.com https://via.intercom.io https://api.intercom.io https://api.au.intercom.io https://api.eu.intercom.io https://api-iam.intercom.io https://api-iam.eu.intercom.io https://api-iam.au.intercom.io https://api-ping.intercom.io https://nexus-websocket-a.intercom.io wss://nexus-websocket-a.intercom.io https://nexus-websocket-b.intercom.io wss://nexus-websocket-b.intercom.io https://nexus-europe-websocket.intercom.io wss://nexus-europe-websocket.intercom.io https://nexus-australia-websocket.intercom.io wss://nexus-australia-websocket.intercom.io https://uploads.intercomcdn.com https://uploads.intercomcdn.eu https://uploads.au.intercomcdn.com https://uploads.eu.intercomcdn.com https://uploads.intercomusercontent.com https://livekit.grok.com wss://livekit.grok.com https://production.plaid.com/ https://sandbox.plaid.com/ https://ingestion.dv.socure.io https://network.dv.socure.io/ https://analytics.dv.socure.io/ https://payments-dev.x.com/customer/wasm/forward-with-v1.wasm https://payments-staging.x.com/customer/wasm/forward-with-v1.wasm https://payments-prod.x.com/customer/wasm/forward-with-v1.wasm https://money-dev.x.com/customer/wasm/forward-with-v1.wasm https://money-staging.x.com/customer/wasm/forward-with-v1.wasm https://money.x.com/customer/wasm/forward-with-v1.wasm https://api.stripe.com https://m.castle.io https://edge.prelude.dev https://checkoutshopper-live.adyen.com wss://*.pscp.tv https://vmap.grabyo.com https://dwo3ckksxlb0v.cloudfront.net https://media.riffsy.com https://*.giphy.com https://media.tenor.com https://c.tenor.com wss://chat-ws.x.com https://d1muhwhmpsz4u8.cloudfront.net/ https://d2bchqfeno8n2m.cloudfront.net/ https://d2shtph9y6bxk.cloudfront.net/ https://xchat-hsm-staging.x.com/ https://realm-a.x.com https://realm-b.x.com https://realm-west1.x.com https://realm-east1.x.com https://hsm-staging.x.com https://ads-twitter.com https://analytics.twitter.com https://analytics.x.com ; default-src 'self'; form-action 'self' https://twitter.com https://*.twitter.com https://x.com https://*.x.com https://localhost.twitter.com:3443 https://localhost.x.com:3443 https://accounts.x.ai https://grok.com https://intercom.help https://api-iam.intercom.io https://api-iam.eu.intercom.io https://api-iam.au.intercom.io; font-src 'self' https://*.twimg.com https://js.intercomcdn.com https://fonts.intercomcdn.com; frame-src 'self' https://accounts.google.com/ https://accounts.google.com/gsi/ https://cards-frame.twitter.com https://cdn.plaid.com/ https://client-api.arkoselabs.com/ https://content.googleapis.com/ https://iframe.arkoselabs.com/ https://mobile.twitter.com https://mobile.x.com https://pay.twitter.com https://pay.x.com https://google.com https://www.google.com https://intercom-sheets.com https://www.intercom-reporting.com https://www.youtube.com https://player.vimeo.com https://fast.wistia.net https://console.googletagservices.com https://*.doubleclick.net https://*.adtrafficquality.google https://*.safeframe.googlesyndication.com https://www.googleadservices.com https://googleadservices.com https://adservice.google.com https://*.googlesyndication.com https://td.doubleclick.net https://payments-dev.x.com/ https://payments-staging.x.com/ https://payments-prod.x.com/ https://sdn.payments-dev.x.com/ https://sdn.payments-staging.x.com/ https://sdn.payments-prod.x.com/ https://money-dev.x.com/ https://money-staging.x.com/ https://money.x.com/ https://sdn.money-dev.x.com/ https://sdn.money-staging.x.com/ https://sdn.money.x.com/ https://p2pcreditcardiframesandbox.crbcos.com https://p2pcreditcardiframe.crbcos.com https://verify-sandbox.plaid.com/ https://*.js.stripe.com https://js.stripe.com https://hooks.stripe.com https://cdn.getpinwheel.com/ https://artifacts.grokusercontent.com https://twitter.com https://x.com https://studio.x.com https://studio-dev.x.com https://recaptcha.net/recaptcha/; img-src 'self' blob: data: https://www.google.com/maps/place/ https://imgs.search.brave.com https://*.cdn.twitter.com https://*.cdn.x.com https://ton.twitter.com https://ton.x.com https://*.twimg.com https://analytics.twitter.com https://analytics.x.com https://cm.g.doubleclick.net https://www.google-analytics.com https://maps.googleapis.com https://www.periscope.tv https://www.pscp.tv https://ads-twitter.com https://ads-api.twitter.com https://ads-api.x.com https://api.x.com https://developer.x.com blob: data: https://js.intercomcdn.com https://static.intercomassets.com https://downloads.intercomcdn.com https://downloads.intercomcdn.eu https://downloads.au.intercomcdn.com https://uploads.intercomusercontent.com https://gifs.intercomcdn.com https://video-messages.intercomcdn.com https://messenger-apps.intercom.io https://messenger-apps.eu.intercom.io https://messenger-apps.au.intercom.io https://*.intercom-attachments-1.com https://*.intercom-attachments.eu https://*.au.intercom-attachments.com https://*.intercom-attachments-2.com https://*.intercom-attachments-3.com https://*.intercom-attachments-4.com https://*.intercom-attachments-5.com https://*.intercom-attachments-6.com https://*.intercom-attachments-7.com https://*.intercom-attachments-8.com https://*.intercom-attachments-9.com https://static.intercomassets.eu https://static.au.intercomassets.com https://media.riffsy.com https://*.giphy.com https://media.tenor.com https://c.tenor.com https://*.pscp.tv https://*.periscope.tv https://prod-periscope-profile.s3-us-west-2.amazonaws.com https://platform-lookaside.fbsbx.com https://scontent.xx.fbcdn.net https://scontent-sea1-1.xx.fbcdn.net https://*.googleusercontent.com https://t.co/1/i/adsct https://*.googleusercontent.com https://*.gstatic.com https://*.googlesyndication.com https://*.adtrafficquality.google https://www.google.com/ads/measurement/ https://*.google.com/ads/measurement/ https://googleads.g.doubleclick.net https://google.com https://www.google.com https://plaid-merchant-logos.plaid.com https://plaid-counterparty-logos.plaid.com https://client-logos.plaid.com https://assets.mouseion.dev https://assets.grok.com; manifest-src 'self'; media-src 'self' data: blob: https://twitter.com https://x.com https://*.twimg.com https://*.vine.co https://*.pscp.tv https://*.video.pscp.tv https://*.watch.x.com https://js.intercomcdn.com https://downloads.intercomcdn.com https://downloads.intercomcdn.eu https://downloads.au.intercomcdn.com https://dwo3ckksxlb0v.cloudfront.net; object-src 'none'; script-src 'self' 'unsafe-inline' https://*.twimg.com https://recaptcha.net/recaptcha/ http://www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js https://accounts.google.com/gsi/client https://apis.google.com/js/api.js https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js https://client-api.arkoselabs.com/ https://static.ads-twitter.com https://twitter.com https://www.google-analytics.com https://www.gstatic.com/cast/sdk/libs/caf_receiver/v3/cast_receiver_framework.js https://x.com https://sdn.payments-dev.x.com/assets/loader.min.js https://sdn.payments-staging.x.com/assets/loader.min.js https://sdn.payments-prod.x.com/assets/loader.min.js https://sdn.money-dev.x.com/assets/loader.min.js https://sdn.money-staging.x.com/assets/loader.min.js https://sdn.money.x.com/assets/loader.min.js https://sdk.dv.socure.io/latest/device-risk-sdk.js https://cdn.plaid.com/link/v2/stable/link-initialize.js https://payments-dev.x.com/customer/wasm/xxp-forward-with-sdk.js https://payments-staging.x.com/customer/wasm/xxp-forward-with-sdk.js https://payments-prod.x.com/customer/wasm/xxp-forward-with-sdk.js https://money-dev.x.com/customer/wasm/xxp-forward-with-sdk.js https://money-staging.x.com/customer/wasm/xxp-forward-with-sdk.js https://money.x.com/customer/wasm/xxp-forward-with-sdk.js https://js.stripe.com https://*.js.stripe.com https://cdn.getpinwheel.com/pinwheel-v3.2.1.js https://securepubads.g.doubleclick.net https://www.googletagservices.com https://*.googletagservices.com https://pagead2.googlesyndication.com https://adservice.google.com https://www.googleadservices.com https://ads.google.com https://tpc.googlesyndication.com https://*.tpc.googlesyndication.com https://googleads.g.doubleclick.net https://app.intercom.io https://widget.intercom.io https://js.intercomcdn.com 'wasm-unsafe-eval' 'nonce-K4D6L6pgdj88fdhLTkwNjMtMDAxMDFlNmRhZTFk'; style-src 'self' 'unsafe-inline' https://accounts.google.com/gsi/style https://*.twimg.com; child-src 'self' blob:; worker-src 'self' blob:; report-uri https://x.com/i/csp_report?a=O5RXE%3D%3D%3D&ro=false","content-type":"text/html; charset=utf-8","cross-origin-embedder-policy":"unsafe-none","cross-origin-opener-policy":"unsafe-none","date":"Sun, 17 May 2026 22:18:00 GMT","expiry":"Tue, 31 Mar 1981 05:00:00 GMT","last-modified":"Sun, 17 May 2026 22:18:00 GMT","origin-cf-ray":"9fd5feda18b20b6a-AMS","perf":"7402827104","pragma":"no-cache","reporting-endpoints":"coep-report=\"https://x.com/i/coep-report\", coop-report=\"https://x.com/i/coop-report\"","server":"cloudflare envoy","set-cookie":"__cf_bm=pyabuL3VlXXE2sH7Y46t35434DxI48I.fuZ0-1779056280.258214-1.0.1.1-9cOVZ_i.hzE0rjWx0jD.NR5LyF6ZCg3VxQIHtlIq5xeRTMmsw.o8lHnZQmgqe.V4CsGFFReQhTrx_w2.vRV9X8eNa6Fr4kl35OF6vVIHLAcvXD0PcTwQe_9x6E8s4f1XB; HttpOnly; SameSite=None; Secure; Path=/; Domain=x.com; Expires=Sun, 17 May 2026 22:48:00 GMT","strict-transport-security":"max-age=631138519; includeSubdomains","vary":"accept-encoding","x-content-type-options":"nosniff","x-frame-options":"DENY","x-powered-by":"Express","x-response-time":"15","x-served-by":"t4_a","x-transaction-id":"ac07974bc5a4e57e","x-xss-protection":"0"},"b":"PCFET0NUWVBFIGh0bWw+PGh0bWwgZGlyPSJsdHIiIGxhbmc9ImVuIj48aGVhZD48bWV0YSBjaGFyc2V0PSJ1dGYtOCIgLz48bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSx2aWV3cG9ydC1maXQ9Y292ZXIiIC8+PGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSIvL2Ficy50d2ltZy5jb20iIC8+PGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSIvL2FwaS54LmNvbSIgLz48bGluayByZWw9InByZWNvbm5lY3QiIGhyZWY9Ii8vcGJzLnR3aW1nLmNvbSIgLz48bGluayByZWw9InByZWxvYWQiIGFzPSJmb250IiB0eXBlPSJmb250L3dvZmYyIiBjcm9zc29yaWdpbiBmZXRjaHByaW9yaXR5PSJoaWdoIiBocmVmPSJodHRwczovL2Ficy50d2ltZy5jb20vcmVzcG9uc2l2ZS13ZWIvY2xpZW50LXdlYi9DaGlycC1SZWd1bGFyLjgwZmRhMjdhLndvZmYyIiAvPjxsaW5rIHJlbD0icHJlbG9hZCIgYXM9ImZvbnQiIHR5cGU9ImZvbnQvd29mZjIiIGNyb3Nzb3JpZ2luIGZldGNocHJpb3JpdHk9ImhpZ2giIGhyZWY9Imh0dHBzOi8vYWJzLnR3aW1nLmNvbS9yZXNwb2

  3. Netman82 commented on May 18, 2026

    @Netman82
    Author

    @therealaleph
    regarding to #1249 , for other websites like chatgpt.com and grok.com this time it gives s:200. but again returns json.

  4. dazzling-no-more commented on May 18, 2026

    @dazzling-no-more
    Contributor

    @Netman82 the redeploy fixed the ERR_CONTENT_DECODING_FAILED. The raw JSON you're seeing now is a separate bug: your Apps Script Code.gs is older than v2.0.2 and double-wraps the exit-node's response, which rahgozar then hands to the browser as page content.

    (The "The script completed but did not return anything." page when visiting the URL directly is intentional — it's a decoy for GET requests so scanners can't fingerprint it. Not a problem.)

    Fix — redeploy Apps Script:

    1. Open your Apps Script project at https://script.google.com
    2. Replace the entire script file with the current assets/apps_script/Code.gs
    3. Deploy → Manage deployments → ✏️ Edit → Version: New version → Deploy
    4. URL stays the same, no config change needed. Reload x.com / chatgpt.com / grok.com through rahgozar.

    The next client release will detect this misconfig and surface a clear log error instead of rendering raw JSON.

  5. Netman82 commented on May 18, 2026

    @Netman82
    Author

    @dazzling-no-more it worked - halfway - for x.com chatgpt! thanks (v2.0.2 rahgozar)!

    hosts in config:

        "hosts": [
          "chatgpt.com",
          "claude.ai",
          "x.com",
          "grok.com",
          "zonegfx.com",
          "aistudio.google.com"
        ]
    
    1. aistudio.google.com gives:
      403 That’s an error.
      Your client does not have permission to get URL / from this server. That’s all we know.

    2. Can I add my websites behind CF of my choice to the config file?
      I added zonegfx.com but CF protection still come up (loops).

    3. Logging in to grok (https://accounts.x.ai/check-login?redirect=grok-com):
      Sorry, you have been blocked
      You are unable to access x.ai

    4. claude.ai in https://claude.ai/login still behind CF protection (loops)

    All tested via Firefox (never opened any of these before in FF).

  6. therealaleph commented on May 18, 2026

    @therealaleph
    Owner

    Thanks, that result is useful: it means the old raw-JSON wrapping problem is fixed for your setup, and now we are down to normal destination-side behavior.

    For the four remaining cases:

    1. aistudio.google.com returning Google's 403 is expected in this architecture. Google blocks some Google-owned services from being fetched through Apps Script / Google server-side paths. This is not the same as a broken exit node.
    2. You can add your own Cloudflare-backed domains to exit_node.hosts, but it is not a guaranteed Cloudflare bypass. It only changes the exit IP to your Deno/VPS/worker-side IP. If Cloudflare still classifies that IP/browser fingerprint as risky, the challenge can still loop.
    3. accounts.x.ai blocking login is also destination-side anti-bot/risk scoring. The exit node can make the request come from outside Iran, but it cannot guarantee that x.ai will accept that IP/session.
    4. claude.ai looping on Cloudflare means the same thing: the route is working, but the selected exit IP/fingerprint is not trusted enough by Cloudflare.

    So the practical rule is:

    • raw JSON or ERR_CONTENT_DECODING_FAILED = client / Apps Script version problem; fixed by v1.9.29 Code.gs redeploy.
    • cf-mitigated: challenge, Cloudflare loop, or destination 403 = the destination rejected the exit IP/session. Try a different exit node/VPS/provider/browser profile, but this is not fully solvable from Code.gs alone.

    Keeping this issue open as the canonical exit-node behavior thread for now.


    Answered via LLM, Supervised @therealaleph

  7. dazzling-no-more commented on May 18, 2026

    @dazzling-no-more
    Contributor

    @dazzling-no-more it worked - halfway - for x.com chatgpt! thanks (v2.0.2 rahgozar)!

    hosts in config:

        "hosts": [
          "chatgpt.com",
          "claude.ai",
          "x.com",
          "grok.com",
          "zonegfx.com",
          "aistudio.google.com"
        ]
    
    1. aistudio.google.com gives:
      403 That’s an error.
      Your client does not have permission to get URL / from this server. That’s all we know.
    2. Can I add my websites behind CF of my choice to the config file?
      I added zonegfx.com but CF protection still come up (loops).
    3. Logging in to grok (https://accounts.x.ai/check-login?redirect=grok-com):
      Sorry, you have been blocked
      You are unable to access x.ai
    4. claude.ai in https://claude.ai/login still behind CF protection (loops)

    All tested via Firefox (never opened any of these before in FF).

    Good progress! Quick answers:

    Yes, add any host to hosts — that's exactly what the list is for. There's no fixed allowlist; whatever you put there routes through your exit-node.

    accounts.x.ai — grok login redirects to accounts.x.ai, which is a different domain. Add x.ai to your hosts list.

    claude.ai / zonegfx.com still CF-blocked even after adding — root cause: Deno Deploy runs on Google Cloud, and CF flags some Google datacenter IPs. Worked for x.com / chatgpt.com because CF doesn't flag your specific Deno region for those, but does for claude.ai / zonegfx. Fix: switch your exit-node host to one with a non-GCP outbound IP — a $3-5/mo VPS works best. Deploy assets/exit_node/wrapper.ts there instead of Deno Deploy, then point relay_url in your config at the VPS. Same PSK works; no other change needed.

    aistudio.google.com 403 — that's a Google sanctions block, not a rahgozar routing issue. Google refuses Iranian users at the account/policy layer (the "Your client does not have permission" page is Google's own geo-block), and no combination of Apps Script + exit-node routing will get past it on its own. You'd need a non-Iran Google account paired with a non-Iran exit-node IP — outside what rahgozar's config alone can solve. I'd just remove it from hosts.

  8. valo-io commented on May 18, 2026

    @valo-io

    Hi,
    I'm also using the exit-node with Deno. and also replaced the google script with the one in the assets/apps_script/Code.gs and made a new deploy, and replaced the deployment ids with the new ones in the gui and saved the config and all that, but still getting {"s":200,"h":{...},"b":""} json when opening the hosts that are going through the exit node.
    am I missing a step?

  9. dazzling-no-more commented on May 18, 2026

    @dazzling-no-more
    Contributor

    Hi, I'm also using the exit-node with Deno. and also replaced the google script with the one in the assets/apps_script/Code.gs and made a new deploy, and replaced the deployment ids with the new ones in the gui and saved the config and all that, but still getting {"s":200,"h":{...},"b":""} json when opening the hosts that are going through the exit node. am I missing a step?

    Did you use rahgozar app? (the fork of this repository with some new features and bug fixes)
    https://github.com/dazzling-no-more/rahgozar/releases/tag/v2.0.3

  10. therealaleph commented on May 19, 2026

    @therealaleph
    Owner

    For the { "s": 200, "h": {...}, "b": "" } case: that still means the browser is receiving the exit-node envelope as page content instead of mhrv-rs unwrapping it into a normal HTTP response.

    Please check these two things:

    1. If you are testing the rahgozar fork, use the matching app + matching Code.gs from that fork. Mixing upstream mhrv-rs app with fork-only exit-node changes can produce confusing results.
    2. If you are testing upstream mhrv-rs, use v1.9.29+ or newer and redeploy the current upstream assets/apps_script/Code.gs as New version in Apps Script. Saving the file is not enough.

    If it still happens after that, please post:

    app/repo used: mhrv-rs or rahgozar
    version:
    exit_node provider: Deno/VPS/Worker
    one affected host:
    first 30 log lines around that host:
    

    Keeping this thread as the canonical exit-node/raw-envelope thread.


    Answered via LLM, Supervised @therealaleph

  11. Stevemoretz commented on May 20, 2026

    @Stevemoretz

    Hi @dazzling-no-more good job with the fork the main issue is it's very unstable it assumes ideal network connections and low timeouts! That's why it's much slower even in normal mode (without exit node) compared to the original upstream. It works but often all you get is timeouts, you have over-optimized your version not taking the unstable conditions into account. Otherwise a pretty good fork!

    Some examples (Only pasted the warnings)

    2026-05-20T10:46:58.089801Z  INFO h2 connection established to relay edge
    2026-05-20T10:47:04.125669Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:04.125690Z  WARN exit node failed for https://b.slack-edge.com/bv1-13/gantry-v2-async-gantry-v2-vendors-async.090063dc8b008fc36307.min.js?cacheKey=gantry-1779268052 and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:10.260109Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:10.260131Z  WARN exit node failed for https://gemini.google.com/ and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:10.260150Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:10.260171Z  WARN exit node failed for https://google-ohttp-relay-safebrowsing.fastly-edge.com/ and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:10.260109Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:10.260131Z  WARN exit node failed for https://gemini.google.com/ and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:10.260150Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:10.260171Z  WARN exit node failed for https://google-ohttp-relay-safebrowsing.fastly-edge.com/ and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:18.092023Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:18.092040Z  WARN exit node failed for https://b.slack-edge.com/bv1-13/gantry-v2-async-gantry-v2-shared-boot-async.1de384b35147fc0f8a27.min.js?cacheKey=gantry-1779268052 and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:24.137336Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:24.137382Z  WARN exit node failed for https://b.slack-edge.com/bv1-13/gantry-v2-async-gantry-v2-vendors-async.090063dc8b008fc36307.min.js?cacheKey=gantry-1779268052 and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-20T10:47:28.726124Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-20T10:47:28.726182Z  WARN exit node failed for https://github.com/therealaleph/MasterHttpRelayVPN-RUST/issues/1285 and request was already sent (timeout); not falling back to direct Apps Script
    
  12. dazzling-no-more commented on May 20, 2026

    @dazzling-no-more
    Contributor

    Hi @Stevemoretz, thanks — useful report, those warnings point at a real over-conservative path.

    What's happening: exit-node mode wraps your request in an outer POST to Apps Script (carrying the inner relay JSON). When that outer POST hits a post-send timeout, the code refuses to retry because the exit node may already have started the inner fetch, and a silent retry could duplicate a non-idempotent inner call. Correct in principle — but currently over-applied: every URL in your paste is an inner GET (.min.js, HTML), which is safe to retry. The direct relay path already falls back to h1 on safe methods; the exit-node outer call doesn't. I'll fix that asymmetry in the next patch so inner GET/HEAD/OPTIONS can retry through the outer wrapper.

    Separately: the 25 s response deadline, 5 s h2 ready, and 8 s h2 connect are hardcoded constants today. I'll expose them as config so you can dial them up on bad links.

    Two things from your description I want to separate from this fix:

    • "slower in normal mode (without exit node)" is a different code path — exit-node mode pays an extra hop and that hardcoded 25 s outer deadline. If direct mode is also slower than upstream for you, can you share a few WARN lines from a mode: "direct" run with no exit node configured? Different bug, want to chase it separately.
    • What rahgozar version are you on, and what's request_timeout_secs in your config.json?
  13. Stevemoretz commented on May 25, 2026

    @Stevemoretz

    Hi @dazzling-no-more thank you for the response, sorry for the delay in getting back to you. The version is 2.0.3, there is no request_timeout_secs in my config! When I save the json it doesn't add it so it should be whatever defaults are hardcoded. By slower fork than the original version, I meant the normal mode not exit node mode, I don't know why but at least version 2.0.3 is very slower for me, it could be just all of those timeouts however...

    How can I set : request_timeout_secs properly so it works like the original repo it was forked from? That probably solves most things?


    Just tried the latest version in exit mode it's so much better so far, I see a few new errors however:

    2026-05-25T17:23:19.170358Z ERROR Relay failed: relay error: fetch failed: Exception: Attribute provided with invalid value: method
    

    Yeah but after a little bit of usage things break again:

    2026-05-25T17:31:52.025001Z ERROR Relay failed: timeout
    2026-05-25T17:31:52.694925Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:52.695029Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player/heartbeat?alt=json and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-25T17:31:55.538929Z  WARN ip-health: probe failed for 216.239.38.120 (1/3)
    2026-05-25T17:31:56.780998Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:56.781026Z  WARN exit node failed for https://wss-primary.slack.com/?token=xoxc-8101421830711-8937040029568-9169281059713-ad48807e2f850eaf8c5eeb1d427d1d7de652a99a5e78d10aa7c0abe88e277c5c&sync_desync=1&slack_client=desktop&start_args=%3Fagent%3Dclient%26org_wide_aware%3Dtrue%26agent_version%3D1779708155%26eac_cache_ts%3Dtrue%26cache_ts%3D0%26name_tagging%3Dtrue%26only_self_subteams%3Dtrue%26connect_only%3Dtrue%26ms_latest%3Dtrue&no_query_on_subscribe=1&flannel=3&lazy_channels=1&gateway_server=T082ZCDQELX-4&batch_presence_aware=1 and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-25T17:31:57.025897Z  WARN h2 ping unanswered after 10s — closing stale connection
    2026-05-25T17:31:57.026041Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:57.026028Z  WARN h2 post-send failure for non-idempotent POST https://rr1---sn-tn.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&redirect_counter=1&rm=sn-4g5edr7e&rrc=104&rsdai=1&cms_redirect=yes&cmsv=e&ipbypass=yes&met=1779730186,&mh=c8&mip=35.187.134.163&mm=44&mn=sn-tn&ms=lva&mt=1779729759&mv=u&mvi=1&pl=28&lsparams=ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRQIhAN9IkbxqKOonUNoZ3ZTbgaqH0XiOLX_e0rdHIvJ0jFEGAiB5dvukuRzlT3V0uZJjNWoMrya8iKyK5qgTOM-XLohDJA%3D%3D&rn=104&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-25T17:31:57.026151Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr1---sn-tn.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&redirect_counter=1&rm=sn-4g5edr7e&rrc=104&rsdai=1&cms_redirect=yes&cmsv=e&ipbypass=yes&met=1779730186,&mh=c8&mip=35.187.134.163&mm=44&mn=sn-tn&ms=lva&mt=1779729759&mv=u&mvi=1&pl=28&lsparams=ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRQIhAN9IkbxqKOonUNoZ3ZTbgaqH0XiOLX_e0rdHIvJ0jFEGAiB5dvukuRzlT3V0uZJjNWoMrya8iKyK5qgTOM-XLohDJA%3D%3D&rn=104&alr=yes
    2026-05-25T17:31:57.026515Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-25T17:31:57.026090Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player/heartbeat?alt=json and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-25T17:31:57.026113Z  WARN h2 post-send failure for non-idempotent POST https://rr2---sn-4g5ednde.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1779730182%2C&mh=c8&mm=44%2C29&mn=sn-4g5lznes%2Csn-4g5ednde&ms=lva%2Crdu&mv=u&mvi=1&pl=54&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&mt=1779730019&fvip=2&keepalive=yes&fexp=51565115%2C51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms&lsig=APaTxxMwRAIgKq-D-qTma_dTiYPAm0oofyE-RNRcW_up8Nxki2d0AmgCIBpEULcQLKVGdC6sSVx_7TcN1KszV_22uw8FeMuuAPdJ&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&fallback_count=1&rn=103&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-25T17:31:57.027101Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr2---sn-4g5ednde.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1779730182%2C&mh=c8&mm=44%2C29&mn=sn-4g5lznes%2Csn-4g5ednde&ms=lva%2Crdu&mv=u&mvi=1&pl=54&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&mt=1779730019&fvip=2&keepalive=yes&fexp=51565115%2C51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms&lsig=APaTxxMwRAIgKq-D-qTma_dTiYPAm0oofyE-RNRcW_up8Nxki2d0AmgCIBpEULcQLKVGdC6sSVx_7TcN1KszV_22uw8FeMuuAPdJ&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&fallback_count=1&rn=103&alr=yes
    2026-05-25T17:31:57.027161Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-25T17:31:57.026085Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:57.027244Z  WARN exit node failed for https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=8HlpVLLQqBhNH9iW&ver=2&cmt=2123.668&fmt=278&fs=0&rt=76.001&euri&lact=193&live=dvr&cl=918025328&state=paused&volume=63&cbrand=apple&cbr=Chrome&cbrver=145.0.0.0&c=WEB&cver=2.20260521.00.00&cplayer=UNIPLAYER&cos=Macintosh&cosver=10_15_7&cplatform=DESKTOP&hl=en_US&cr=DE&uga=m29&rtn=116&feature=g-high-rec&afmt=140&idpj=-3&ldpj=-39&rti=76&st=3254.138&et=3254.184&muted=0&docid=3mYr_AN66Oo&ei=BocUatnON6C9hcIPp7qt-Qo&plid=AAZSp7lZnTktOhs5&referrer=https%3A%2F%2Fwww.youtube.com%2F&sdetail=p%3A%2F&sourceid=y&of=fH7Y9Q42iXLhZR6JxnvxsA&vm=CAEQARgEOjJBSHFpSlRKdVFadXl5aFF5Zm9YNXpjUGpnLTlRNUQ2N1VCeTJ6YTNENjhxVndzWXJBQWJfQUxkcUFQS1hxNnphdHZlT2hwbGRwNUJKUlVSQWVIenBEVnVvMmx3YmtnM0t0cldzTHBPVWhLUTVRa1cxY0J6dVZleW1pZF9keG5QRlVDWXJfb2RnYy1JQ1RGQi0tMDQ and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    
  14. therealaleph commented on May 25, 2026

    @therealaleph
    Owner

    Thanks for the new logs. Two important notes:

    1. Upstream mhrv-rs has now merged the timeout/resilience part in fix(domain_fronter): large download resilience, stream timeout decoupling, and compact log timestamps #1346, and I am shipping it as v1.9.35. That release adds a longer default stream timeout and safer handling for idempotent exit-node requests, so please retest this same case with upstream v1.9.35 + the matching upstream assets/apps_script/Code.gs.

    2. Exception: Attribute provided with invalid value: method is different from the earlier raw-envelope / timeout issue. It usually means the Apps Script UrlFetchApp.fetch() options received a bad or unexpected HTTP method value. If you only see it on the fork, please report it there with the exact fork version and matching fork Code.gs; if you can reproduce it on upstream v1.9.35, post the first few log lines before that error and the affected host.

    Also, please redact query tokens from logs before posting. Some app URLs include bearer/session-like values in the query string, and GitHub issues are public.

    For Slack/YouTube heartbeat/WebSocket-style endpoints, there may still be architectural limits: Apps Script is not a true long-lived streaming transport. The v1.9.35 fix should improve ordinary large downloads and safe GET retries, but it cannot make every WebSocket or heartbeat flow reliable through Apps Script.


    Answered via LLM, Supervised @therealaleph

  15. dazzling-no-more commented on May 25, 2026

    @dazzling-no-more
    Contributor

    Hi @dazzling-no-more thank you for the response, sorry for the delay in getting back to you. The version is 2.0.3, there is no request_timeout_secs in my config! When I save the json it doesn't add it so it should be whatever defaults are hardcoded. By slower fork than the original version, I meant the normal mode not exit node mode, I don't know why but at least version 2.0.3 is very slower for me, it could be just all of those timeouts however...

    How can I set : request_timeout_secs properly so it works like the original repo it was forked from? That probably solves most things?

    Just tried the latest version in exit mode it's so much better so far, I see a few new errors however:

    2026-05-25T17:23:19.170358Z ERROR Relay failed: relay error: fetch failed: Exception: Attribute provided with invalid value: method
    

    Yeah but after a little bit of usage things break again:

    2026-05-25T17:31:52.025001Z ERROR Relay failed: timeout
    2026-05-25T17:31:52.694925Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:52.695029Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player/heartbeat?alt=json and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-25T17:31:55.538929Z  WARN ip-health: probe failed for 216.239.38.120 (1/3)
    2026-05-25T17:31:56.780998Z  WARN h2 exit-node outer call post-send failure: timeout — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:56.781026Z  WARN exit node failed for https://wss-primary.slack.com/?token=xoxc-8101421830711-8937040029568-9169281059713-ad48807e2f850eaf8c5eeb1d427d1d7de652a99a5e78d10aa7c0abe88e277c5c&sync_desync=1&slack_client=desktop&start_args=%3Fagent%3Dclient%26org_wide_aware%3Dtrue%26agent_version%3D1779708155%26eac_cache_ts%3Dtrue%26cache_ts%3D0%26name_tagging%3Dtrue%26only_self_subteams%3Dtrue%26connect_only%3Dtrue%26ms_latest%3Dtrue&no_query_on_subscribe=1&flannel=3&lazy_channels=1&gateway_server=T082ZCDQELX-4&batch_presence_aware=1 and request was already sent (timeout); not falling back to direct Apps Script
    2026-05-25T17:31:57.025897Z  WARN h2 ping unanswered after 10s — closing stale connection
    2026-05-25T17:31:57.026041Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:57.026028Z  WARN h2 post-send failure for non-idempotent POST https://rr1---sn-tn.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&redirect_counter=1&rm=sn-4g5edr7e&rrc=104&rsdai=1&cms_redirect=yes&cmsv=e&ipbypass=yes&met=1779730186,&mh=c8&mip=35.187.134.163&mm=44&mn=sn-tn&ms=lva&mt=1779729759&mv=u&mvi=1&pl=28&lsparams=ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRQIhAN9IkbxqKOonUNoZ3ZTbgaqH0XiOLX_e0rdHIvJ0jFEGAiB5dvukuRzlT3V0uZJjNWoMrya8iKyK5qgTOM-XLohDJA%3D%3D&rn=104&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-25T17:31:57.026151Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr1---sn-tn.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&redirect_counter=1&rm=sn-4g5edr7e&rrc=104&rsdai=1&cms_redirect=yes&cmsv=e&ipbypass=yes&met=1779730186,&mh=c8&mip=35.187.134.163&mm=44&mn=sn-tn&ms=lva&mt=1779729759&mv=u&mvi=1&pl=28&lsparams=ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRQIhAN9IkbxqKOonUNoZ3ZTbgaqH0XiOLX_e0rdHIvJ0jFEGAiB5dvukuRzlT3V0uZJjNWoMrya8iKyK5qgTOM-XLohDJA%3D%3D&rn=104&alr=yes
    2026-05-25T17:31:57.026515Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-25T17:31:57.026090Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player/heartbeat?alt=json and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-25T17:31:57.026113Z  WARN h2 post-send failure for non-idempotent POST https://rr2---sn-4g5ednde.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1779730182%2C&mh=c8&mm=44%2C29&mn=sn-4g5lznes%2Csn-4g5ednde&ms=lva%2Crdu&mv=u&mvi=1&pl=54&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&mt=1779730019&fvip=2&keepalive=yes&fexp=51565115%2C51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms&lsig=APaTxxMwRAIgKq-D-qTma_dTiYPAm0oofyE-RNRcW_up8Nxki2d0AmgCIBpEULcQLKVGdC6sSVx_7TcN1KszV_22uw8FeMuuAPdJ&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&fallback_count=1&rn=103&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-25T17:31:57.027101Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr2---sn-4g5ednde.googlevideo.com/videoplayback?expire=1779751782&ei=BocUatnON6C9hcIPp7qt-Qo&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=3mYr_AN66Oo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1779730182%2C&mh=c8&mm=44%2C29&mn=sn-4g5lznes%2Csn-4g5ednde&ms=lva%2Crdu&mv=u&mvi=1&pl=54&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv9aq4GoejcGjmeNsAekHnshyVg-qPS-TQgENaLJFjPmx6Joe8_0Nr_G7woDZimhmDac_&live=1&hang=1&noclen=1&svpuc=1&ns=8xojxww-TkEakAqDvDjbFLsV&sabr=1&rqh=1&reg=0&mt=1779730019&fvip=2&keepalive=yes&fexp=51565115%2C51565681&c=WEB&n=y_G9JJxVx06guw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRQIhAIDFsw5pZu5MojcGEooSeKO8TAjzNnvPVBXnsqfB31yfAiAZVNYGCvFpk8fJsxFQDOzT--9FTb0i3On-SbYahhmO-A%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms&lsig=APaTxxMwRAIgKq-D-qTma_dTiYPAm0oofyE-RNRcW_up8Nxki2d0AmgCIBpEULcQLKVGdC6sSVx_7TcN1KszV_22uw8FeMuuAPdJ&cpn=8HlpVLLQqBhNH9iW&cver=2.20260521.00.00&fallback_count=1&rn=103&alr=yes
    2026-05-25T17:31:57.027161Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-25T17:31:57.026085Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-25T17:31:57.027244Z  WARN exit node failed for https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=8HlpVLLQqBhNH9iW&ver=2&cmt=2123.668&fmt=278&fs=0&rt=76.001&euri&lact=193&live=dvr&cl=918025328&state=paused&volume=63&cbrand=apple&cbr=Chrome&cbrver=145.0.0.0&c=WEB&cver=2.20260521.00.00&cplayer=UNIPLAYER&cos=Macintosh&cosver=10_15_7&cplatform=DESKTOP&hl=en_US&cr=DE&uga=m29&rtn=116&feature=g-high-rec&afmt=140&idpj=-3&ldpj=-39&rti=76&st=3254.138&et=3254.184&muted=0&docid=3mYr_AN66Oo&ei=BocUatnON6C9hcIPp7qt-Qo&plid=AAZSp7lZnTktOhs5&referrer=https%3A%2F%2Fwww.youtube.com%2F&sdetail=p%3A%2F&sourceid=y&of=fH7Y9Q42iXLhZR6JxnvxsA&vm=CAEQARgEOjJBSHFpSlRKdVFadXl5aFF5Zm9YNXpjUGpnLTlRNUQ2N1VCeTJ6YTNENjhxVndzWXJBQWJfQUxkcUFQS1hxNnphdHZlT2hwbGRwNUJKUlVSQWVIenBEVnVvMmx3YmtnM0t0cldzTHBPVWhLUTVRa1cxY0J6dVZleW1pZF9keG5QRlVDWXJfb2RnYy1JQ1RGQi0tMDQ and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    

    Can you also test with the latest version of Rahgozar?

  16. Stevemoretz commented on May 27, 2026

    @Stevemoretz

    Hi @dazzling-no-more that's what I did but here's now the latest one that I just downloaded, some issues does exist, but it's much better, my main question is does it keep retrying h2 path? Because I find myself closing and opening it and it gets fast, then it says h2 failed at some point then it's horrible until I close and open again, so if it already doesn't have some settings for timeouts/retries would be great... like h2 should by default anyway retry forever in the background... by you know what I mean and probably maximum timeout we possibly can set (6 minutes is it?) by default? or an option to set it.

    Other than that, great piece of work! Good job really this is awesome!

    2026-05-27T19:24:44.195595Z  WARN h2 ping unanswered after 10s — closing stale connection
    2026-05-27T19:24:44.195734Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-27T19:24:44.195732Z  WARN h2 post-send failure for non-idempotent POST https://rr2---sn-tn.googlevideo.com/videoplayback?expire=1779927222&ei=VjQXauSRF7SahcIP_uPHkAs&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=aNqT567uuWo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv8b_L7PSRo4xgUcbn8oBuGu4ZLVFM5FcPvW2qR48jhKrEu-a_MiZI69Tx9uG60cwl1xM&live=1&hang=1&noclen=1&svpuc=1&ns=U3B1KBuAL7dspHazmgJkDHwV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=IMxUMOZP7ddFSA&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRAIgcH3C01YmouaWbaQAgwcYJQ036QfsxbNf4b7jqkGT8G8CIGEZ82_6x4Ld301SNfQJxNH928Tt187HrYLKnGEimgV0&cpn=uBOV9dx7EY2Aw88l&cver=2.20260526.01.00&rm=sn-4g5eyy76&rrc=104&rsdai=1&ipbypass=yes&cms_redirect=yes&cmsv=e&met=1779908459,&mh=MZ&mip=35.187.134.105&mm=44&mn=sn-tn&mr=y&ms=lva&mt=1779908212&mv=u&mvi=2&pl=28&remap_counter=1&lsparams=ipbypass,met,mh,mip,mm,mn,mr,ms,mv,mvi,pl,remap_counter,rms&lsig=APaTxxMwRAIgTycCTWcJ8msLPIPF3SJHYelDT3RPAkd_UJgvSXKbY48CIAnE1zyHBMxISP5ukldbX_lPYrrleiezA7sfoEwKCnqW&rn=590&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-27T19:24:44.195740Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-27T19:24:44.195833Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr2---sn-tn.googlevideo.com/videoplayback?expire=1779927222&ei=VjQXauSRF7SahcIP_uPHkAs&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=aNqT567uuWo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv8b_L7PSRo4xgUcbn8oBuGu4ZLVFM5FcPvW2qR48jhKrEu-a_MiZI69Tx9uG60cwl1xM&live=1&hang=1&noclen=1&svpuc=1&ns=U3B1KBuAL7dspHazmgJkDHwV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=IMxUMOZP7ddFSA&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRAIgcH3C01YmouaWbaQAgwcYJQ036QfsxbNf4b7jqkGT8G8CIGEZ82_6x4Ld301SNfQJxNH928Tt187HrYLKnGEimgV0&cpn=uBOV9dx7EY2Aw88l&cver=2.20260526.01.00&rm=sn-4g5eyy76&rrc=104&rsdai=1&ipbypass=yes&cms_redirect=yes&cmsv=e&met=1779908459,&mh=MZ&mip=35.187.134.105&mm=44&mn=sn-tn&mr=y&ms=lva&mt=1779908212&mv=u&mvi=2&pl=28&remap_counter=1&lsparams=ipbypass,met,mh,mip,mm,mn,mr,ms,mv,mvi,pl,remap_counter,rms&lsig=APaTxxMwRAIgTycCTWcJ8msLPIPF3SJHYelDT3RPAkd_UJgvSXKbY48CIAnE1zyHBMxISP5ukldbX_lPYrrleiezA7sfoEwKCnqW&rn=590&alr=yes
    2026-05-27T19:24:44.195804Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player?prettyPrint=false and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-27T19:24:44.196143Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-27T19:24:44.195811Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-27T19:24:44.195787Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-27T19:24:44.196196Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player?prettyPrint=false and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-27T19:24:44.195838Z  WARN h2 post-send failure for non-idempotent POST https://rr2---sn-tn.googlevideo.com/videoplayback?expire=1779927222&ei=VjQXauSRF7SahcIP_uPHkAs&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=aNqT567uuWo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv8b_L7PSRo4xgUcbn8oBuGu4ZLVFM5FcPvW2qR48jhKrEu-a_MiZI69Tx9uG60cwl1xM&live=1&hang=1&noclen=1&svpuc=1&ns=U3B1KBuAL7dspHazmgJkDHwV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=IMxUMOZP7ddFSA&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRAIgcH3C01YmouaWbaQAgwcYJQ036QfsxbNf4b7jqkGT8G8CIGEZ82_6x4Ld301SNfQJxNH928Tt187HrYLKnGEimgV0&cpn=uBOV9dx7EY2Aw88l&cver=2.20260526.01.00&rm=sn-4g5eyy76&rrc=104&rsdai=1&ipbypass=yes&cms_redirect=yes&cmsv=e&met=1779908459,&mh=MZ&mip=35.187.134.105&mm=44&mn=sn-tn&mr=y&ms=lva&mt=1779908212&mv=u&mvi=2&pl=28&remap_counter=1&lsparams=ipbypass,met,mh,mip,mm,mn,mr,ms,mv,mvi,pl,remap_counter,rms&lsig=APaTxxMwRAIgTycCTWcJ8msLPIPF3SJHYelDT3RPAkd_UJgvSXKbY48CIAnE1zyHBMxISP5ukldbX_lPYrrleiezA7sfoEwKCnqW&rn=592&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-27T19:24:44.196292Z  WARN h2 post-send failure for non-idempotent POST https://rr2---sn-tn.googlevideo.com/videoplayback?expire=1779927222&ei=VjQXauSRF7SahcIP_uPHkAs&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=aNqT567uuWo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv8b_L7PSRo4xgUcbn8oBuGu4ZLVFM5FcPvW2qR48jhKrEu-a_MiZI69Tx9uG60cwl1xM&live=1&hang=1&noclen=1&svpuc=1&ns=U3B1KBuAL7dspHazmgJkDHwV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=IMxUMOZP7ddFSA&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRAIgcH3C01YmouaWbaQAgwcYJQ036QfsxbNf4b7jqkGT8G8CIGEZ82_6x4Ld301SNfQJxNH928Tt187HrYLKnGEimgV0&cpn=uBOV9dx7EY2Aw88l&cver=2.20260526.01.00&rm=sn-4g5eyy76&rrc=104&rsdai=1&ipbypass=yes&cms_redirect=yes&cmsv=e&met=1779908459,&mh=MZ&mip=35.187.134.105&mm=44&mn=sn-tn&mr=y&ms=lva&mt=1779908212&mv=u&mvi=2&pl=28&remap_counter=1&lsparams=ipbypass,met,mh,mip,mm,mn,mr,ms,mv,mvi,pl,remap_counter,rms&lsig=APaTxxMwRAIgTycCTWcJ8msLPIPF3SJHYelDT3RPAkd_UJgvSXKbY48CIAnE1zyHBMxISP5ukldbX_lPYrrleiezA7sfoEwKCnqW&rn=591&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-27T19:24:44.196342Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr2---sn-tn.googlevideo.com/videoplayback?expire=1779927222&ei=VjQXauSRF7SahcIP_uPHkAs&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=aNqT567uuWo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv8b_L7PSRo4xgUcbn8oBuGu4ZLVFM5FcPvW2qR48jhKrEu-a_MiZI69Tx9uG60cwl1xM&live=1&hang=1&noclen=1&svpuc=1&ns=U3B1KBuAL7dspHazmgJkDHwV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=IMxUMOZP7ddFSA&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRAIgcH3C01YmouaWbaQAgwcYJQ036QfsxbNf4b7jqkGT8G8CIGEZ82_6x4Ld301SNfQJxNH928Tt187HrYLKnGEimgV0&cpn=uBOV9dx7EY2Aw88l&cver=2.20260526.01.00&rm=sn-4g5eyy76&rrc=104&rsdai=1&ipbypass=yes&cms_redirect=yes&cmsv=e&met=1779908459,&mh=MZ&mip=35.187.134.105&mm=44&mn=sn-tn&mr=y&ms=lva&mt=1779908212&mv=u&mvi=2&pl=28&remap_counter=1&lsparams=ipbypass,met,mh,mip,mm,mn,mr,ms,mv,mvi,pl,remap_counter,rms&lsig=APaTxxMwRAIgTycCTWcJ8msLPIPF3SJHYelDT3RPAkd_UJgvSXKbY48CIAnE1zyHBMxISP5ukldbX_lPYrrleiezA7sfoEwKCnqW&rn=592&alr=yes
    2026-05-27T19:24:44.196368Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr2---sn-tn.googlevideo.com/videoplayback?expire=1779927222&ei=VjQXauSRF7SahcIP_uPHkAs&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=aNqT567uuWo.1&source=yt_live_broadcast&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=lva%2Clva&ss=1&ssa=1&siu=1&spc=96Xrv8b_L7PSRo4xgUcbn8oBuGu4ZLVFM5FcPvW2qR48jhKrEu-a_MiZI69Tx9uG60cwl1xM&live=1&hang=1&noclen=1&svpuc=1&ns=U3B1KBuAL7dspHazmgJkDHwV&sabr=1&rqh=1&reg=0&keepalive=yes&fexp=51565115,51565681&c=WEB&n=IMxUMOZP7ddFSA&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Css%2Cssa%2Csiu%2Cspc%2Clive%2Chang%2Cnoclen%2Csvpuc%2Cns%2Csabr%2Crqh%2Creg&sig=AHEqNM4wRAIgcH3C01YmouaWbaQAgwcYJQ036QfsxbNf4b7jqkGT8G8CIGEZ82_6x4Ld301SNfQJxNH928Tt187HrYLKnGEimgV0&cpn=uBOV9dx7EY2Aw88l&cver=2.20260526.01.00&rm=sn-4g5eyy76&rrc=104&rsdai=1&ipbypass=yes&cms_redirect=yes&cmsv=e&met=1779908459,&mh=MZ&mip=35.187.134.105&mm=44&mn=sn-tn&mr=y&ms=lva&mt=1779908212&mv=u&mvi=2&pl=28&remap_counter=1&lsparams=ipbypass,met,mh,mip,mm,mn,mr,ms,mv,mvi,pl,remap_counter,rms&lsig=APaTxxMwRAIgTycCTWcJ8msLPIPF3SJHYelDT3RPAkd_UJgvSXKbY48CIAnE1zyHBMxISP5ukldbX_lPYrrleiezA7sfoEwKCnqW&rn=591&alr=yes
    2026-05-27T19:24:44.196513Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-27T19:24:44.196255Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-27T19:24:44.195960Z  WARN h2 post-send failure for non-idempotent POST https://rr5---sn-5ualdnsl.googlevideo.com/videoplayback?expire=1779931457&ei=4UQXarSJKqaAi9oPw7_5oAY&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=o-AJbyC8wxqNUDsldWKqRK--P8J42j_bVIX5JmQ-Mh0A4X&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=au%2Cau&siu=1&spc=96Xrvx67ax-3BrwgOssnfoV0XZ56Kp7sHhWA7ilhOEWwN6Eda-vkxtp4mqUAf-H7Xs_FUUaIzV0&svpuc=1&ns=4-6fGPY233NQ-fTQz-l4ebYV&sabr=1&rqh=1&keepalive=yes&fexp=51565115,51565681&c=WEB&n=_GKGHCU4YSoScw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Csiu%2Cspc%2Csvpuc%2Cns%2Csabr%2Crqh&sig=AHEqNM4wRAIgJubJ9DVDQ19VdwfRwpo1HeIiONDWOeo0btR4gPjmyF4CIBRjL0wkAMbVw4r8yu9LkVAiHeE5fpS4_aU0_co4kZya&cpn=VuNnB2b5885m6ICd&cver=2.20260526.08.00&redirect_counter=1&rm=sn-4g5eys76&rrc=104&cms_redirect=yes&cmsv=e&cps=143&ipbypass=yes&met=1779909869,&mh=M5&mip=107.178.193.206&mm=31&mn=sn-5ualdnsl&ms=au&mt=1779909437&mv=m&mvi=5&pl=28&lsparams=cps,ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRAIgfnOazzSHQndCkyr6E8nx7hS7Jdo1PEw85TiSoEH_Ap4CIEKx6d3vS3kmPNQXD9_8fIGCnne-EvoMwh3Qqz9r4zNf&rn=3&alr=yes: relay error: h2 body chunk: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-27T19:24:44.196341Z  WARN h2 post-send failure for non-idempotent POST https://rr5---sn-4g5lzner.googlevideo.com/videoplayback?expire=1779931457&ei=4UQXarSJKqaAi9oPw7_5oAY&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=o-AJbyC8wxqNUDsldWKqRK--P8J42j_bVIX5JmQ-Mh0A4X&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&cps=237&met=1779909857%2C&mh=M5&mm=31%2C29&mn=sn-4g5edndy%2Csn-4g5lzner&ms=au%2Crdu&mv=m&mvi=5&pl=54&rms=au%2Cau&initcwndbps=1843750&siu=1&spc=96Xrvx67ax-3BrwgOssnfoV0XZ56Kp7sHhWA7ilhOEWwN6Eda-vkxtp4mqUAf-H7Xs_FUUaIzV0&svpuc=1&ns=4-6fGPY233NQ-fTQz-l4ebYV&sabr=1&rqh=1&mt=1779908973&fvip=5&keepalive=yes&fexp=51565115%2C51565681&c=WEB&n=_GKGHCU4YSoScw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Csiu%2Cspc%2Csvpuc%2Cns%2Csabr%2Crqh&sig=AHEqNM4wRAIgJubJ9DVDQ19VdwfRwpo1HeIiONDWOeo0btR4gPjmyF4CIBRjL0wkAMbVw4r8yu9LkVAiHeE5fpS4_aU0_co4kZya&lsparams=cps%2Cmet%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRgIhANXhDIFbP7Z7JudZuHyAnaVuG1g8L4tlJt-mk4ounXsvAiEA-F9kQ3gMzBioQzkdn1A1sK1zg5CJvwKUC-iUaIeSu4Q%3D&cpn=VuNnB2b5885m6ICd&cver=2.20260526.08.00&fallback_count=1&rn=4&alr=yes: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating side effects
    2026-05-27T19:24:44.195829Z  WARN h2 exit-node outer call post-send failure: relay error: h2 response: stream closed because of a broken pipe — marking non-retryable to prevent duplicating the inner request
    2026-05-27T19:24:44.195858Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player?prettyPrint=false and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-27T19:24:44.197233Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player?prettyPrint=false and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-27T19:24:44.196400Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    2026-05-27T19:24:44.196242Z  WARN exit node failed for https://www.youtube.com/generate_204 and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-27T19:24:44.196876Z  WARN exit node failed for https://www.youtube.com/youtubei/v1/player?prettyPrint=false and request was already sent (relay error: h2 response: stream closed because of a broken pipe); not falling back to direct Apps Script
    2026-05-27T19:24:44.197133Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 body chunk: stream closed because of a broken pipe); not duplicating POST https://rr5---sn-5ualdnsl.googlevideo.com/videoplayback?expire=1779931457&ei=4UQXarSJKqaAi9oPw7_5oAY&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=o-AJbyC8wxqNUDsldWKqRK--P8J42j_bVIX5JmQ-Mh0A4X&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&rms=au%2Cau&siu=1&spc=96Xrvx67ax-3BrwgOssnfoV0XZ56Kp7sHhWA7ilhOEWwN6Eda-vkxtp4mqUAf-H7Xs_FUUaIzV0&svpuc=1&ns=4-6fGPY233NQ-fTQz-l4ebYV&sabr=1&rqh=1&keepalive=yes&fexp=51565115,51565681&c=WEB&n=_GKGHCU4YSoScw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Csiu%2Cspc%2Csvpuc%2Cns%2Csabr%2Crqh&sig=AHEqNM4wRAIgJubJ9DVDQ19VdwfRwpo1HeIiONDWOeo0btR4gPjmyF4CIBRjL0wkAMbVw4r8yu9LkVAiHeE5fpS4_aU0_co4kZya&cpn=VuNnB2b5885m6ICd&cver=2.20260526.08.00&redirect_counter=1&rm=sn-4g5eys76&rrc=104&cms_redirect=yes&cmsv=e&cps=143&ipbypass=yes&met=1779909869,&mh=M5&mip=107.178.193.206&mm=31&mn=sn-5ualdnsl&ms=au&mt=1779909437&mv=m&mvi=5&pl=28&lsparams=cps,ipbypass,met,mh,mip,mm,mn,ms,mv,mvi,pl,rms&lsig=APaTxxMwRAIgfnOazzSHQndCkyr6E8nx7hS7Jdo1PEw85TiSoEH_Ap4CIEKx6d3vS3kmPNQXD9_8fIGCnne-EvoMwh3Qqz9r4zNf&rn=3&alr=yes
    2026-05-27T19:24:44.197186Z  WARN relay attempt 1 failed and is non-retryable (relay error: h2 response: stream closed because of a broken pipe); not duplicating POST https://rr5---sn-4g5lzner.googlevideo.com/videoplayback?expire=1779931457&ei=4UQXarSJKqaAi9oPw7_5oAY&ip=2a01%3A4f8%3Ac010%3A365e%3Ab2%3A%3A1&id=o-AJbyC8wxqNUDsldWKqRK--P8J42j_bVIX5JmQ-Mh0A4X&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&cps=237&met=1779909857%2C&mh=M5&mm=31%2C29&mn=sn-4g5edndy%2Csn-4g5lzner&ms=au%2Crdu&mv=m&mvi=5&pl=54&rms=au%2Cau&initcwndbps=1843750&siu=1&spc=96Xrvx67ax-3BrwgOssnfoV0XZ56Kp7sHhWA7ilhOEWwN6Eda-vkxtp4mqUAf-H7Xs_FUUaIzV0&svpuc=1&ns=4-6fGPY233NQ-fTQz-l4ebYV&sabr=1&rqh=1&mt=1779908973&fvip=5&keepalive=yes&fexp=51565115%2C51565681&c=WEB&n=_GKGHCU4YSoScw&sparams=expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Cxpc%2Csiu%2Cspc%2Csvpuc%2Cns%2Csabr%2Crqh&sig=AHEqNM4wRAIgJubJ9DVDQ19VdwfRwpo1HeIiONDWOeo0btR4gPjmyF4CIBRjL0wkAMbVw4r8yu9LkVAiHeE5fpS4_aU0_co4kZya&lsparams=cps%2Cmet%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRgIhANXhDIFbP7Z7JudZuHyAnaVuG1g8L4tlJt-mk4ounXsvAiEA-F9kQ3gMzBioQzkdn1A1sK1zg5CJvwKUC-iUaIeSu4Q%3D&cpn=VuNnB2b5885m6ICd&cver=2.20260526.08.00&fallback_count=1&rn=4&alr=yes
    2026-05-27T19:24:44.198393Z ERROR Relay failed: relay error: h2 body chunk: stream closed because of a broken pipe
    2026-05-27T19:24:44.198437Z ERROR Relay failed: relay error: h2 response: stream closed because of a broken pipe
    
    2026-05-27T19:39:03.698384Z ERROR Relay failed: relay error: fetch failed: Exception: Attribute provided with invalid value: method
    
  17. dazzling-no-more commented on May 28, 2026

    @dazzling-no-more
    Contributor

    @Stevemoretz
    Thanks for the detailed test report, glad the new build is much better!

    Quick answer on the h2 question: yes, h2 already auto-retries. You don't need to close and reopen — when an h2 connection dies, the very next request reopens a fresh one. There is no sticky "h2 disabled" state from a broken-pipe death; the only permanent disable is when the peer refuses h2 via ALPN entirely, and that isn't what's happening here.

    What you're seeing in the log is not "h2 gave up." Those marking non-retryable to prevent duplicating the inner request lines are intentional — they're about the requests that were already in flight at the moment the connection died. A POST whose body may have already reached YouTube's origin can't safely be replayed (duplicate uploads, double playback-tracking calls, etc.), so we surface the failure instead of silently doubling side effects. The next request after the death still uses h2.

    The death detection itself is app-level PINGs every 15s with a 10s PONG budget, so worst case the dead connection is replaced ~25s after it actually died. The "close and reopen makes it fast again" feeling is just that a restart happens to align you with a fresh connection — if you wait ~30s the same recovery happens on its own.

    Timeout knob already exists: request_timeout_secs in your config (default 30s, accepts 5–300). Bumping it to 300 gives you a 5-minute per-request budget. The 6-minute figure you're remembering is Apps Script's hard execution ceiling — that's upstream from this client and not something I can extend past.

    I'm not going to make POSTs retry-forever — that's a footgun on non-idempotent calls and would cause exactly the kind of duplicate-side-effects we're trying to prevent. But if you can catch a case where the h2 path isn't being reopened after a death (i.e. you see a death burst at T, then 30–60s of h1-only traffic and no h2 connection established to relay edge log line), please grab logs around that window and I'll dig in.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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