Highly sophisticated proxy used for evading internet censorship or accessing websites in a controlled sandbox using the power of service-workers and more! Easy deployment version (Node.js)

Overview

Ultraviolet-Node

The deployable version of Ultraviolet, a highly sophisticated proxy used for evading internet censorship or accessing websites in a controlled sandbox using the power of service-workers and more!

Quick Deployments

Deploy to Heroku Run on Replit

Features

  • CAPTCHA support along with hCAPTCHA support
  • URL encoding settings to further hide activity when using Ultraviolet
  • Configuration all done on the client-side via service-workers
  • Speed in comparison to other web proxies that fully proxy content
  • Blacklist setting and more for easy hosting
  • Security in mind and leak prevention
  • Frequent updates to improve site support or fix security issues

Supported Sites

Technologies Used

  • Service Workers
  • HTML, JS, CSS rewriting
  • Parse5
  • Acorn.js

Used by

  • Incognito, a popular web proxy service with focus on privacy
  • Holy-Unblocker, a popular web proxy service focusing on bypassing web filters and more
  • Hypertabs, a web proxy service using a PWA browser as its frontend

Table of Contents

Installation and Setup

Installation of Ultraviolet is simple. You can find a Tl;DR of the installation and setup process just below. If you are unfamiliar with the "standard" installation process, look a bit farther down for a more comprehensive installation and setup guide.

Basic Guide

$ git clone https://github.com/titaniumnetwork-dev/Ultraviolet-Node --recursive
$ cd Ultraviolet-Node
$ npm install
$ npm start

Replit Setup Guide

To setup on Replit, first click on the "Run on Replit" button. After loading into your repl, click on the green "Run" button. Alternatively, run the following commands:

$ npm install
$ chmod +x main.sh
$ ./main.sh

You will only have to run the second command once. It just allows main.sh to be executed. By running main.sh, you will update any submodules and will start the app.

Note: If you choose not to use main.sh, but would rather just run all commands manually, please note that you will have to manually install submodules by running git update submodules --init. Without it, static will not be installed, and that is a required directory.

Comprehensive Guide

Below will describe a comprehensive guide to install Ultraviolet on Linux machines.

To clone the repository, simply run the following command:

$ git clone https://github.com/titaniumnetwork-dev/Ultraviolet-Node --recursive

The --recursive flag will clone the repository and all submodules.

To begin work on the actual setup, cd into the repository. You can do so by running the following command:

$ cd Ultraviolet-Node

From here, you can update your submodules and install your dependencies. To do so, run the following command:

$ npm install

Finally, to start Ultraviolet, run the following command:

$ npm start

You can then find Ultraviolet on http://127.0.0.1:8080. If you would like to change the port UV will be running on, edit the last line in index.mjs.

Please note that UV will not function without HTTPS. If you are hosting on Replit or Heroku, this won't be a problem as they provide you with SSL/TLS by default and will automatically apply it to your instance, however if you are attempting to host UV on a different platform, such as a personal server, you WILL need to use HTTPS.

Configuration

Configuring Ultraviolet is very simple. Simple descriptions of each configurable option are provided as a comment in the block below. More detailed documentation can be found just below mentioned block.

uv.config.js

self.__uv$config = {
    prefix: '/sw/', // Proxy url prefix
    bare: '/bare/', // Bare server location
    encodeUrl: Ultraviolet.codec.xor.encode, // URL Encoding function
    decodeUrl: Ultraviolet.codec.xor.decode, // Decode URL function
    handler: '/uv.handler.js', // Handler script
    bundle: '/uv.bundle.js', // Bundled script
    config: '/uv.config.js', // Configuration script
    sw: '/uv.sw.js', // Service Worker Script
};
Configuration Options and Explanation
Prefix The prefix is the prefix that you want users to see. Ex: https://example.com/service. The default prefix is service.
Bare Bare Servers can run on directories. For example, if the directory was /bare/ then the bare origin would look like http://example.org/bare/. The bare origin is passed to clients.
encodeUrl EncodeUrl is how you want the URL a proxy site's visitors has to be encoded. Options include Ultraviolet.codec.base64.encode, Ultraviolet.codec.plain.encode, or Ultraviolet.codec.xor.encode. It is recommended that you use xor or base64 as it hides the queries your visitors are searching and visiting.
decodeURL DecodeUrl is how you want the url to be decoded. It is recommended you keep it the same as encodeUrl.
Handler Handler is the path to the UV handler. The default name and path to this file is static/uv/uv.handler.js.
Bundle Bundle is the path to the UV bundle file. The default name and path to this file is static/uv/uv.bundle.js.
Config Config is the path to the UV config file. The default name and path to this file is static/uv/uv.bundle.js.
SW SW is the path to the UV Service Worker script. The default name and path to this file is static/uv/uv.sw.js.

Static Files

Static files is the frontend for Ultraviolet. A standalone repository for it can be found here.

Core Scripts

Configuration mentions a few scripts that make up Ultraviolet. To get documentation for what each of the scripts do, check out the documentation for them in their standalone repository.

Main Scripts After Building

The client-hooking & service worker scripts required for UV are located in ultraviolet-scripts

  • Scripts
    • uv.sw.js Service worker gateway
    • uv.sw-handler.js - Service worker handler
    • uv.bundle.js Webpack compiled Ultraviolet rewriter
    • uv.handler.js Client-side hooking
    • uv.config.js Configuration

Authors

  • Caracal.js (Creator of Ultraviolet)
  • Divide (Creator of TOMP)

Credits

Comments
  • TypeError: failed to fetch #2

    TypeError: failed to fetch #2

    Issue tracker is ONLY used for reporting bugs. New features should be discussed on our Discord server.

    I know this is an issue that has already been opened. This is more detailed, however

    Expected Behavior

    • When going to any website (e.x: https://github.com) it should show the website that the user has requested

    Current Behavior

    • When I Type in a url it throws an error of: TypeError: failed to fetch pictures below in order (Ungoogle Chromium v106) image image image

    Possible Solution

    • I believe this is more related to the Ultraviolet Static Repository as one version ago this was working fine.

    Steps to Reproduce

    1. Setup the newest version of Ultraviolet-Node
    2. Type in (or search) what ever you wish
    3. See a TypeError: failed to fetch

    Context (Environment)

    • Host: Hosted on Digital ocean VPS.
    • OS: Ubuntu 20.04 (LTS)
    • My setup: NGINX Proxy Manager --> Ultraviolet
    • Node JS version: 18
    • NPM version 8
    • I am passing all correct headers:
    location / { 
                    # Upgrade WebSockets
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection 'Upgrade';
                    # Increase header buffer
                    proxy_connect_timeout 10; 
                    proxy_send_timeout 90; 
                    proxy_read_timeout 90; 
                    proxy_buffer_size 128k;
                    proxy_buffers 4 256k;
                    proxy_busy_buffers_size 256k;
                    proxy_temp_file_write_size 256k;
                    proxy_pass http://10.124.0.3:1042; # change this to the port UltraViolet is listening on
    
                # The small block below will block googlebot
                if ($http_user_agent ~ (Googlebot)) {
                    return 403;
                }
            }
    

    (See Proxdocs)

    • Tried on three different browsers:
    • Firefox v105.0.2
    • Ungoogled Chromium v106.0.5249.9
    • Chrome v106.0.5249.91
    • I am trying to update my UltraViolet instance hosted on my VPS and it will break if I do.
    • I am a developer for a non-official proxy called Weeb Central and updating the website will break it
    • I am developing my own proxy (not public on GH yet) and updating will break the website from working

    Possible Implementation

    I don't know a possible fix however I hope this is detailed enough that it will help it get fixed sooner.

    opened by MotorTruck1221 10
  • Javascript error

    Javascript error

    Issue tracker is ONLY used for reporting bugs. New features should be discussed on our Discord server.

    Expected Behavior

    website would search things

    Current Behavior

    doesnt search the thing i want because of a javascript error

    Possible Solution

    Steps to Reproduce

    1. install UV
    2. try searching something
    3. in webconsole it spits errors out when i press enter

    Context (Environment)

    Detailed Description

    the host is Ubuntu 22.04.1 LTS x86_64 npm version 8.19.2

    image image

    Possible Implementation

    opened by smikkelbakje 8
  • TypeError: Failed to fetch

    TypeError: Failed to fetch

    Issue tracker is ONLY used for reporting bugs. New features should be discussed on our Discord server.

    Expected Behavior

    the discord main website should show

    Current Behavior

    I get an error, TypeError: Failed to fetch

    image

    Possible Solution

    🤷‍♂️

    Steps to Reproduce

    1. https://purple-chicken.3kh0.repl.co/
    2. put in discord.com/app

    Context (Environment)

    hosted on replit, this happens for anything you put in the box

    Detailed Description

    Not much to say here, nothing was showing up in console

    Possible Implementation

    🤷‍♂️ make more detailed error messages might help

    opened by 3kh0 4
  • Add GitHub Workflow for Docker

    Add GitHub Workflow for Docker

    opened by np22-jpg 2
  • securly blocked, BUG please fix.

    securly blocked, BUG please fix.

    hi so I have a bug.

    it says securely blocked. You should fix this because you need to fix this bro thanks bro

    This is mY LINK https://googledocs.idk-pixel.repl.co

    opened by idk-pixel 2
  • Update Dockerfile

    Update Dockerfile

    As of now, the current Dockerfile does not appear to work with Podman.

    This PR should create a working docker configuration. Tested with Podman, creates a port on 8080. Runs on a distroless container, built on Debian.

    opened by np22-jpg 1
  • js error

    js error

    Issue tracker is ONLY used for reporting bugs. New features should be discussed on our Discord server.

    Expected Behavior

    UV should start

    Current Behavior

    UV crashes

    Possible Solution

    Steps to Reproduce

    1. git clone
    2. npm install
    3. npm start

    Context (Environment)

    ubuntu npm 8.19.2

    Detailed Description

    when using npm start to start UV it doesnt start but spits out an error

    npm start
    
    > [email protected] start
    > node src/index.js
    
    file:///home/vps/Ultraviolet-Node/node_modules/@tomphttp/bare-server-node/dist/Server.js:33
            init.logErrors ??= false;
                            ^
    
    SyntaxError: Unexpected token '?'
        at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
    

    Possible Implementation

    opened by smikkelbakje 1
  • Fix @tomphttp/bare-server-node dependency & change LICENSE from package.json

    Fix @tomphttp/bare-server-node dependency & change LICENSE from package.json

    Fixes a bug when removing or rebuilding package-lock.json, as the version in the package.json is different from the one used (1.0.2-beta-typings3)

    Repo with this working: IDontCodee/Incognito

    Also changes the license (MIT) to the one from the package.json (GPLv3)

    opened by mdoryammilwalrus 1
  • Replace node-static with serve-static

    Replace node-static with serve-static

    serve-static is made by Express, meaning it should have better support (and possibly greater performance) than node-static. This commit makes the necessary changes for the switch.

    Moreover, this commit ensures static files are found regardless of the current working directory.


    This change is mostly based on NebulaServices/Nebula@fffa8fcf0c50c6ba50556074845ee93dcf61666a. Therefore, this switch has already been battle-tested.

    opened by CountBleck 0
  • `npm run start` fails registering sw, due to using HTTP

    `npm run start` fails registering sw, due to using HTTP

    Issue tracker is ONLY used for reporting bugs. New features should be discussed on our Discord server.

    Expected Behavior

    SW should register on HTTPS protocol.

    Current Behavior

    Ultraviolet starts in http context instead, so SW isn't allowed to start.

    Possible Solution

    Use https library instead of http.

    Steps to Reproduce

    • Clone
    • Run
    opened by luphoria 0
  • Error registering service worker in new version

    Error registering service worker in new version

    Expected Behavior

    Should be registering service worker to be used

    Current Behavior

    Uncaught (in promise) TypeError: Failed to register a ServiceWorker for scope ('http://localhost:8080//service/') with script ('http://localhost:8080/sw.js'): A bad HTTP response code (404) was received when fetching the script.

    Steps to Reproduce

    1. Install latest
    2. npm install in directory
    3. npm start
    4. Open website
    5. Search anything

    Possible Cause

    I used an old version of uv on this computer so its possible some things aren't matching up because of things left by the old version

    opened by Cryodev1 2
  • webp images wont loaded

    webp images wont loaded

    webp images wont loaded (same issue applies to oldUltraviolet, incognito, since early 2022)

    Expected Behavior

    Current Behavior

    404 errors for images

    Possible Solution

    Steps to Reproduce

    1. open meduza dot io website

    Context (Environment)

    Detailed Description

    Possible Implementation

    opened by ForDeployAPP 1
  • Issue with cors

    Issue with cors

    Hello, i'm building a website like hypertabs but image as you can see its complaining about the origin, is there any way i can fix this? (im trying to get the url of the iframe)

    Thanks for making this amazing proxy. Any help appreciated.

    opened by SDWaps 7
  • Heroku deployment NodeJS error

    Heroku deployment NodeJS error

    Expected Behavior

    The app should deploy to heroku successfully without errors

    Current Behavior

    Giving NodeJS error. Here's the full build app logs:

    -----> Building on the Heroku-22 stack
    -----> Determining which buildpack to use for this app
    -----> Node.js app detected
           
    -----> Creating runtime environment
           
           NPM_CONFIG_LOGLEVEL=error
           NODE_VERBOSE=false
           NODE_ENV=production
           NODE_MODULES_CACHE=true
           
    -----> Installing binaries
           engines.node (package.json):  >=16.0.0
           engines.npm (package.json):   >=7.0.0
           
           Resolving node version >=16.0.0...
           Downloading and installing node 19.1.0...
           Bootstrapping npm >=7.0.0 (replacing 8.19.3)...
           npm 9.1.2 installed
           
    -----> Installing dependencies
           Installing node modules
           npm ERR! code ENOENT
           npm ERR! syscall open
           npm ERR! path /tmp/Ultraviolet/package.json
           npm ERR! errno -2
           npm ERR! enoent ENOENT: no such file or directory, open '/tmp/Ultraviolet/package.json'
           npm ERR! enoent This is related to npm not being able to find a file.
           npm ERR! enoent 
           
           npm ERR! A complete log of this run can be found in:
           npm ERR!     /tmp/npmcache.KxxYa/_logs/2022-11-22T13_27_45_053Z-debug-0.log
    -----> Build failed
           
           We're sorry this build is failing! You can troubleshoot common issues here:
           https://devcenter.heroku.com/articles/troubleshooting-node-deploys
           
           Some possible problems:
           
           - Dangerous semver range (>) in engines.node
             https://devcenter.heroku.com/articles/nodejs-support#specifying-a-node-js-version
           
           Love,
           Heroku
           
     !     Push rejected, failed to compile Node.js app.
     !     Push failed
    

    Steps to Reproduce

    1. Fork this repo
    2. Attempt to deploy to heroku WITH proper username
    3. Watch the build app logs
    opened by fowntain 0
Owner
Titanium Network
We create popular web-proxy sites.
Titanium Network
The official proxy of Titanium Network with enhanced support for a large majority of sites with hCAPTCHA support. Successor to Alloy Proxy.

Corrosion Titanium Networks main web proxy. Successor to Alloy Installation: npm i corrosion Example: const Corrosion = require('corrosion'); const p

Titanium Network 79 Dec 21, 2022
Full-featured, middleware-oriented, programmatic HTTP and WebSocket proxy for node.js

rocky A multipurpose, full-featured, middleware-oriented and hackable HTTP/S and WebSocket proxy with powerful built-in features such as versatile rou

Tom 370 Nov 24, 2022
A full-featured http proxy for node.js

node-http-proxy node-http-proxy is an HTTP programmable proxying library that supports websockets. It is suitable for implementing components such as

http ... PARTY! 13.1k Jan 3, 2023
Global HTTP/HTTPS proxy agent configurable using environment variables.

global-agent Global HTTP/HTTPS proxy configurable using environment variables. Usage Setup proxy using global-agent/bootstrap Setup proxy using bootst

Gajus Kuizinas 267 Dec 20, 2022
A proxy web app that serves ABC iView content outside of the iView webplayer, avoiding intrusive data harvesting.

iview-proxy A proxy web app that serves ABC iView content outside of the iView webplayer, avoiding intrusive data harvesting. There's also a cool Andr

The OpenGov Australia Project 11 Jul 16, 2022
DSC-AlarmServer - Creates web interface to DSC/Envisalink with proxy.

DSC-AlarmServer Creates web interface to DSC/Envisalink with proxy. Since the Envisalink module can only have one connection, this phython script can

null 4 Oct 11, 2022
Simple proxy that is intended to support on chaos testing.

Proxy with Behavior Proxy with Behavior is a node application that work as a reverse proxy, and enables apply some behaviors to be executed in request

José Carlos de Moraes Filho 7 Jan 28, 2022
Prefect API Authentication/Authorization Proxy for on-premises deployments

Proxy Authorization Service for Prefect UI and Prefect CLI Prefect is a great platform for building data flows/pipelines. It supports hybrid execution

Softrams 20 Dec 10, 2022
wabac.js CORS Proxy

wabac.js CORS Proxy This provides a simple CORS proxy, which is designed to run as a Cloudflare Worker. This system is compatible with wabac.js-based

Webrecorder 3 Mar 8, 2022
Simple, configurable part mock part proxy

Moxy Simple, configurable mock / proxy server. Table of Contents Quick start Programatic CLI Docker Docker compose Usage Programatic Via HTTP requests

Acrontum GmbH 7 Aug 12, 2022
A JavaScript, zero-dependency, super small version of IP2Location LITE country lookups.

ip3country This is a zero-dependency, super small, IP address to 2-letter country code lookup library. There are already several libraries available,

Statsig 34 Dec 14, 2022
Hello! Welcome to Our own Live Code Editor 2!! This is supported tabs and full-screen editing, Console, tabs and more are coming. We uses this one in our all tutorials. Made by @E-Coders & @Genius398

Live Code Editor 2 Hello! this is our live code editor an another second release version of our main Resporibity. This have style as tabs and more fea

Educational Websites 5 Nov 18, 2021
Run Node.js on Android by rewrite Node.js in Java

node-android Run Node.js on Android by rewrite Node.js in Java with the compatible API. third-party: libuvpp, libuv-java JNI code by Oracle. Build Clo

AppNet.Link 614 Nov 15, 2022
An online code editor for interviews, troubleshooting, teaching & more…

PEER CODER ⭐ Overview ?? Real time code syncing among peers ??‍?? Executes code in Java, Python, C++, C ?? Real time video and audio call ?? Clean UI

Shreyansh shrey 26 Nov 9, 2022
Promise based HTTP client for the browser and node.js

axios Promise based HTTP client for the browser and node.js New axios docs website: click here Table of Contents Features Browser Support Installing E

axios 98k Dec 31, 2022
Ajax for Node.js and browsers (JS HTTP client)

superagent Small progressive client-side HTTP request library, and Node.js module with the same API, supporting many high-level HTTP client features T

Sloth 16.2k Jan 1, 2023
HTTP server mocking and expectations library for Node.js

Nock HTTP server mocking and expectations library for Node.js Nock can be used to test modules that perform HTTP requests in isolation. For instance,

Nock 11.9k Jan 3, 2023
🌐 Human-friendly and powerful HTTP request library for Node.js

Sindre's open source work is supported by the community. Special thanks to: Human-friendly and powerful HTTP request library for Node.js Moving from R

Sindre Sorhus 12.5k Jan 9, 2023
A fully-featured Node.js REST client built for ease-of-use and resilience

flashheart A fully-featured Node.js REST client built for ease-of-use and resilience flashheart is built on http-transport to provide everything you n

BBC 118 Jun 21, 2022