Skip to content

NovadaLabs/novada-proxy-extension

Repository files navigation

Novada Proxy — Chrome Extension

Chrome extension for routing browser traffic through Novada residential proxies. Supports geo-targeting across 195+ countries and multi-provider fallback.

Features

  • Toggle proxy on/off from the browser toolbar
  • Country selection (195+ countries)
  • Sticky session support
  • Multi-provider: Novada, BrightData, Smartproxy, Oxylabs, Generic
  • Manifest V3 / Chrome 108+

Installation (Developer Mode)

  1. Clone this repo
  2. Open chrome://extensions
  3. Enable Developer mode
  4. Click Load unpacked → select this folder
  5. Open the extension settings → enter your Novada credentials → Save

Novada Credentials

Find your proxy credentials at dashboard.novada.com → Residential Proxies → Endpoint Generator.

Field Value
Username Your zone username (e.g. user_XXXX)
Password Your zone password
Host Your endpoint (e.g. abc.vtv.na.novada.pro)
Port 7777

Known Issue — ERR_TUNNEL_CONNECTION_FAILED (Awaiting Backend Fix)

The extension code is correct. This is a Novada proxy backend issue.

Chrome MV3 extensions authenticate with HTTP proxies via chrome.webRequest.onAuthRequired (asyncBlocking mode). This event fires only after Chrome receives a valid HTTP 407 Proxy Authentication Required challenge.

Root Cause

Novada's residential proxy returns a 407 response missing Content-Length and Connection headers:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm=""

Proxy Authentication Required

Chrome reads the 407 headers, then waits to determine the body length. With no Content-Length, Chrome reads until connection close. When the connection closes, Chrome's network stack treats this as ERR_TUNNEL_CONNECTION_FAILED — not as a proper auth challenge. onAuthRequired never fires.

Verified via raw socket test

Step 1 — unauthenticated CONNECT (same as Chrome's first attempt):
  → HTTP/1.1 407  ✓  (proxy responds correctly)
  → No Content-Length, no Connection: close  ✗

Step 2 — authenticated retry on same connection:
  → Empty response (connection already closed by proxy)  ✗

Note: curl -U works because curl sends Proxy-Authorization preemptively,
skipping the 407 challenge entirely. Chrome cannot do this.

Required Backend Fix

Change the proxy's 407 response to include Content-Length: 0:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: Basic realm="Proxy"
Content-Length: 0
Connection: close

This is the standard behavior of BrightData, Smartproxy, and Oxylabs — their Chrome extensions work because of this one header.

Debug Log

The extension has a built-in log panel (no Chrome debug port needed):

  1. Reload the extension at chrome://extensions
  2. Enable proxy from the popup
  3. Navigate to any HTTPS site (e.g. https://ipinfo.io/json)
  4. Open Options → scroll to bottom → click Read Log

Current output (before backend fix):

PROXY ERROR: {"error":"net::ERR_TUNNEL_CONNECTION_FAILED","fatal":true}

(onAuthRequired never appears — confirms Chrome never fires the event)

Expected output after backend fix:

onAuthRequired fired — isProxy:true url:https://ipinfo.io/json
Fast path — providing auth for: user_XXXX-zone-res-country-us

Architecture

Popup (popup.html/js)
  └─ chrome.runtime.sendMessage → Background Service Worker
       ├─ chrome.proxy.settings.set()      — configures proxy
       ├─ chrome.webRequest.onAuthRequired — provides credentials (asyncBlocking)
       └─ chrome.storage.local            — persists credentials + state

Permissions

Permission Purpose
proxy Configure browser proxy settings
webRequest Intercept proxy auth challenges
webRequestAuthProvider Provide credentials for 407 challenges (MV3)
storage Persist credentials and settings
tabs Open test connection tab
scripting Read test page body text

About

Novada Residential Proxy Chrome Extension — Manifest V3, multi-provider, geo-targeting

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors