Holy-Unblocker/ws-proxy.js
2020-10-13 09:34:59 -07:00

87 lines
1.5 KiB
JavaScript

const WebSocket = require('ws'),
fs = require('fs');
const config = JSON.parse(fs.readFileSync('./config.json', {encoding:'utf8'}));
if (!config.prefix.startsWith('/')) {
config.prefix = `/${config.prefix}`;
}
if (!config.prefix.endsWith('/')) {
config.prefix = `${config.prefix}/`;
}
btoa = (str) => {
str = new Buffer.from(str).toString('base64');
return str;
};
atob = (str) => {
str = new Buffer.from(str, 'base64').toString('utf-8');
return str;
};
module.exports = (server) => {
const wss = new WebSocket.Server({ server: server });
wss.on('connection', (cli, req) => {
try {
const svr = new WebSocket(atob(req.url.toString().replace(`${config.prefix}ws/`, '')));
svr.on('message', (data) => {
try { cli.send(data) } catch(err){}
});
svr.on('open', () => {
cli.on('message', (data) => {
svr.send(data)
});
});
cli.on('close', (code) => {
try { svr.close(code); } catch(err) { svr.close(1006) };
});
svr.on('close', (code) => {
try { cli.close(code); } catch(err) { cli.close(1006) };
});
cli.on('error', (err) => {
try { svr.close(1001); } catch(err) { svr.close(1006) };
});
svr.on('error', (err) => {
try { cli.close(1001); } catch(err) { cli.close(1006) };
});
} catch(err) { cli.close(1001); }
});
}