Skip to content

Commit 11373fd

Browse files
Merge pull request #25 from Ruby-Network/uv3
Move UV to wisp!
2 parents 0c5b782 + 3809b01 commit 11373fd

File tree

14 files changed

+123
-16
lines changed

14 files changed

+123
-16
lines changed

.bundle/config

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
---
2-
BUNDLE_WITHOUT: "test:development"
3-
BUNDLE_PATH: vendor/
2+
BUNDLE_PATH: "vendor/"
3+
BUNDLE_WITHOUT: "development"

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ gem 'thor'
2121
gem 'readline'
2222
gem 'readline-ext'
2323
gem "rack-reverse-proxy", require: "rack/reverse_proxy"
24-
group :development, :test do
24+
group :development do
2525
gem "rerun"
2626
end

main.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@
7272
set :dynamicPath, File.join(settings.root, 'node_modules', '@nebula-services', 'dynamic', 'dist')
7373
dynamicPath()
7474

75+
set :epoxyPath, File.join(settings.root, 'node_modules', '@mercuryworkshop', 'epoxy-transport', 'dist')
76+
epoxyPath()
77+
78+
set :baremuxPath, File.join(settings.root, 'node_modules', '@mercuryworkshop', 'bare-mux', 'dist')
79+
baremuxPath()
80+
7581
# Other routes
7682
get '/rubyHealth/?' do
7783
return "OK"

node-server/server-dev.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const __dirname = path.resolve();
1212
const settings = YAML.parse(fs.readFileSync(path.join(__dirname, '/config/settings.yml'), 'utf8'));
1313
import chalk from 'chalk';
1414
import compile from './compile.js';
15+
import wisp from 'wisp-server-node';
1516
//import getLatestRelease from './version.js';
1617
let rubyPort = process.argv.find((arg) => arg.startsWith('--ruby-port')).split('=')[1] || 9292;
1718
let nodePort = process.argv.find((arg) => arg.startsWith('--node-port')).split('=')[1] || 9293;
@@ -49,6 +50,9 @@ const proxyHandler = (handler, opts) => {
4950
else if (shouldRouteRh(req)) {
5051
routeRhUpgrade(req, socket, head);
5152
}
53+
else if (req.url.endsWith('/wisp/')) {
54+
wisp.routeRequest(req, socket, head);
55+
}
5256
});
5357
};
5458

node-server/server.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const settings = YAML.parse(fs.readFileSync(path.join(__dirname, '/config/settin
1313
import chalk from 'chalk';
1414
import compile from './compile.js';
1515
import getLatestRelease from './version.js';
16+
import wisp from 'wisp-server-node';
1617
let rubyPort = process.argv.find((arg) => arg.startsWith('--ruby-port')).split('=')[1] || 9292;
1718
let nodePort = process.argv.find((arg) => arg.startsWith('--node-port')).split('=')[1] || 9293;
1819

@@ -49,6 +50,9 @@ const proxyHandler = (handler, opts) => {
4950
else if (shouldRouteRh(req)) {
5051
routeRhUpgrade(req, socket, head);
5152
}
53+
else if (req.url.endsWith('/wisp/')) {
54+
wisp.routeRequest(req, socket, head);
55+
}
5256
});
5357
};
5458

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,18 @@
1717
"dependencies": {
1818
"@fastify/http-proxy": "^9.2.1",
1919
"@fastify/middie": "^8.3.0",
20+
"@mercuryworkshop/bare-mux": "^1.0.4",
21+
"@mercuryworkshop/epoxy-transport": "^1.0.2",
2022
"@nebula-services/dynamic": "^0.7.2-patch.2",
21-
"@titaniumnetwork-dev/ultraviolet": "^2.0.0",
23+
"@titaniumnetwork-dev/ultraviolet": "^3.0.0",
2224
"@tomphttp/bare-server-node": "^2.0.0",
2325
"chalk": "^5.2.0",
2426
"fastify": "^4.21.0",
2527
"progress-estimator": "^0.3.1",
2628
"rammerhead": "https://github.com/Ruby-Network/rammerhead/releases/download/v1/rammerhead-2.tgz",
2729
"sass": "^1.62.1",
2830
"typescript": "^5.3.3",
31+
"wisp-server-node": "^1.0.1",
2932
"yaml": "^2.3.1"
3033
}
3134
}

ruby/proxyPaths.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,18 @@ def dynamicPath
1717
end
1818
end
1919
end
20+
21+
def epoxyPath
22+
get '/epoxy/*' do
23+
send_file File.join(settings.epoxyPath, params[:splat][0])
24+
end
25+
end
26+
27+
def baremuxPath
28+
get '/baremux/*' do
29+
if params[:splat][0].end_with?('.cjs')
30+
headers['Content-Type'] = 'application/javascript'
31+
end
32+
send_file File.join(settings.baremuxPath, params[:splat][0])
33+
end
34+
end

src/public/js/register.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
'serviceWorker' in navigator &&
2-
window.addEventListener('load', function () {
3-
navigator.serviceWorker.register('/sw.js', { scope: '/' })
2+
window.addEventListener('load', async function () {
3+
await navigator.serviceWorker.register('/sw.js', { scope: '/' })
44
//uv SW
5-
navigator.serviceWorker.register('/js/sw/uv.js', { scope: '/js/sw/service/uv/' })
6-
navigator.serviceWorker.register('/js/sw/dynamic.js', { scope: '/js/sw/service/dynamic/' })
5+
await navigator.serviceWorker.register('/js/sw/uv.js', { scope: '/js/sw/service/uv/' })
6+
await navigator.serviceWorker.register('/js/sw/dynamic.js', { scope: '/js/sw/service/dynamic/' })
7+
setDefaultTransport();
78
});
89
function regSW() {
910
'serviceWorker' in navigator &&

src/public/js/settings.js

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,27 @@ function setItems() {
103103
let searchInput = document.getElementById('searchInput');
104104
let proxySelect = document.getElementById('proxySelect');
105105
let fullscreenSelect = document.getElementById('fullscreenSelect');
106-
let bareInput = document.getElementById('bareInput');
106+
let wispInput = document.getElementById('wispInput');
107+
let transportSelect = document.getElementById('transportSelect');
108+
//let bareInput = document.getElementById('bareInput');
107109
let title = localStorage.getItem('title');
108110
let favicon = localStorage.getItem('favicon');
109111
let theme = localStorage.getItem('theme');
110112
let search = localStorage.getItem('searchEngine');
111113
let proxy = localStorage.getItem('proxy');
112114
let fullscreen = localStorage.getItem('fullScreen');
113-
let bare = localStorage.getItem('bare');
115+
let wispUrl = localStorage.getItem('wispUrl');
116+
let transports = localStorage.getItem('transports');
117+
//let bare = localStorage.getItem('bare');
114118
titleInput.value = title;
115119
faviconInput.value = favicon;
116120
themeSelect.value = theme;
117121
searchInput.value = search;
118122
proxySelect.value = proxy;
119123
fullscreenSelect.value = fullscreen;
120-
if (bare === window.location.origin + '/bare/') { bareInput.value = '/bare/'; } else { bareInput.value = bare; }
124+
wispInput.value = wispUrl;
125+
transportSelect.value = transports;
126+
//if (bare === window.location.origin + '/bare/') { bareInput.value = '/bare/'; } else { bareInput.value = bare; }
121127
document.documentElement.className = localStorage.getItem('theme');
122128
document.title = title;
123129
document.getElementById('favicon').href = favicon;
@@ -131,6 +137,7 @@ function reset() {
131137
searchSettings('https://www.google.com/search?q=%s');
132138
proxyChange('uv');
133139
fullScreenChange('page');
140+
setDefaultTransport();
134141
setItems();
135142
}
136143
function exportSettings() {
@@ -142,6 +149,8 @@ function exportSettings() {
142149
let fullscreen = localStorage.getItem('fullScreen');
143150
let bare = localStorage.getItem('bare');
144151
let password = localStorage.getItem('password');
152+
let transports = localStorage.getItem('transports');
153+
let wispUrl = localStorage.getItem('wispUrl');
145154
let settings = {
146155
title: title,
147156
favicon: favicon,
@@ -151,6 +160,8 @@ function exportSettings() {
151160
fullscreen: fullscreen,
152161
bare: bare,
153162
password: password,
163+
transports: transports,
164+
wispUrl: wispUrl
154165
}
155166
let a = document.createElement('a');
156167
let file = new Blob([JSON.stringify(settings)], { type: 'text/plain' });
@@ -179,6 +190,8 @@ function importSettings() {
179190
localStorage.setItem('fullScreen', settings.fullscreen);
180191
localStorage.setItem('bare', settings.bare);
181192
localStorage.setItem('password', settings.password);
193+
localStorage.setItem('transports', settings.transports);
194+
changeWisp(settings.wispUrl);
182195
setItems();
183196
console.log('Imported settings');
184197
window.location.reload();
@@ -209,6 +222,27 @@ function passwordKeybinds() {
209222
console.log("Password Keybind initalized");
210223
}
211224

225+
function changeWisp(value) {
226+
if (value.startsWith('http://')) {
227+
value = value.replace('http://', 'ws://');
228+
}
229+
else if (value.startsWith('https://')) {
230+
value = value.replace('https://', 'wss://');
231+
}
232+
localStorage.setItem('wispUrl', value);
233+
setTransports();
234+
}
235+
236+
function transportChange(value) {
237+
if (value === 'soon') {
238+
return;
239+
}
240+
else {
241+
localStorage.setItem('transports', value);
242+
setTransports();
243+
}
244+
}
245+
212246
function init() {
213247
let init = localStorage.getItem('init');
214248
if (init === null || init === undefined || init === 'false') {
@@ -220,7 +254,7 @@ function init() {
220254
localStorage.setItem('searchEngine', 'https://www.google.com/search?q=%s');
221255
localStorage.setItem('proxy', 'uv');
222256
localStorage.setItem('bare', window.location.origin + '/bare/');
223-
localStorage.setItem('fullScreen', 'page');
257+
localStorage.setItem('fullScreen', 'page');
224258
setItems();
225259
}
226260
else {

src/public/js/sw/uv.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
//all Ultraviolet realted stuff goes here
2+
importScripts('/epoxy/index.js');
23
importScripts('/uv/uv.bundle.js');
34
importScripts('/uv/uv.config.js');
45
importScripts('/js/lib/localforage.js');

src/public/js/transports.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const transports = localStorage.getItem('transports');
2+
const wispUrl = localStorage.getItem('wispUrl') || (location.protocol === "https:" ? "wss" : "ws") + "://" + location.host + "/wisp/";
3+
4+
function setTransports() {
5+
switch (transports) {
6+
case 'epoxy':
7+
setEpoxyTransport();
8+
break;
9+
default:
10+
setEpoxyTransport();
11+
break;
12+
}
13+
}
14+
15+
function setDefaultTransport() {
16+
if (!transports) {
17+
localStorage.setItem('transports', 'epoxy');
18+
setEpoxyTransport();
19+
}
20+
}
21+
22+
function setEpoxyTransport() {
23+
BareMux.SetTransport('EpxMod.EpoxyClient', { wisp: localStorage.getItem('wispUrl') || wispUrl });
24+
}

src/public/js/uv/uv.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
self.__uv$config = {
22
prefix: '/js/sw/service/uv/',
3-
bare: '/bare/',
3+
//bare: '/bare/',
44
encodeUrl: Ultraviolet.codec.xor.encode,
55
decodeUrl: Ultraviolet.codec.xor.decode,
66
handler: '/uv/uv.handler.js',

src/views/components/settings.erb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,15 @@
1414
<input type="text" id="faviconInput" name="favicon" class="input" placeholder="Favicon URL" onchange="favicon(this.value)"></input>
1515
<button id="faviconButton" class="button">Set</button>
1616
</div>
17-
<div id="tile">
17+
<!-- div id="tile">
1818
<h2> Bare Server </h2>
1919
<input type="text" id="bareInput" name="bare" class="input" placeholder="Bare Server URL" onchange="bare(this.value)"></input>
2020
<button id="bareButton" class="button">Set</button>
21+
</div -->
22+
<div id="tile">
23+
<h2> Wisp Server </h2>
24+
<input type="text" id="wispInput" name="wisp" class="input" placeholder="Wisp Server URL" onchange="changeWisp(this.value)"></input>
25+
<button id="wispButton" class="button">Set</button>
2126
</div>
2227
<div id="tile">
2328
<h2> Search Engine </h2>
@@ -34,10 +39,17 @@
3439
<h2> Proxy </h2>
3540
<select id="proxySelect" class="select" onchange="proxyChange(this.value)">
3641
<option value="uv"> UltraViolet </option>
37-
<option value="dynamic"> Dynamic (Beta) </option>
42+
<!-- option value="dynamic"> Dynamic (Beta) </option -->
3843
<option value="rammerhead"> Rammerhead </option>
3944
</select>
4045
</div>
46+
<div id="tile">
47+
<h2> Transport </h2>
48+
<select id="transportSelect" class="select" onchange="transportChange(this.value)">
49+
<option value="epoxy"> Epoxy </option>
50+
<!-- option value="soon"> More Soon </option -->
51+
</select>
52+
</div>
4153
<div id="tile">
4254
<h2> Theme </h2>
4355
<select id="themeSelect" class="select" onchange="theme(this.value)">

src/views/layouts/index.erb

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
<meta charset="utf-8">
55
<title><%= yield_content :title %></title>
66
<link rel="stylesheet" href="css/globals.css">
7-
<script src="js/dynamic/dynamic.config.js" defer></script>
7+
<script src="baremux/bare.cjs" defer></script>
8+
<script src="epoxy/index.js" defer></script>
9+
<!-- script src="js/dynamic/dynamic.config.js" defer></script -->
10+
<script src="js/transports.js" defer></script>
811
<script src="uv/uv.bundle.js" defer></script>
912
<script src="uv/uv.config.js" defer></script>
1013
<script src="js/rh/rh.js" defer></script>

0 commit comments

Comments
 (0)