hyper-relay/relay.js

46 lines
1.5 KiB
JavaScript

const DHT = require("@hyperswarm/dht");
const net = require("net");
const pump = require("pump");
const node = new DHT({});
module.exports = () => {
return {
serve: (keyPair, host, port) => {
const server = node.createServer();
server.on("connection", function (servsock) {
const socket = net.connect(port, host);
socket.on('serve error', console.error);
let open = { servsock: true, remote: true };
servsock.on('data', (d) => { socket.write(d) });
socket.on('data', (d) => { servsock.write(d) });
const remoteend = () => {
if (open.remote) socket.end();
open.remote = false;
}
const servsockend = () => {
if (open.servsock) servsock.end();
open.servsock = false;
}
servsock.on('error', remoteend)
servsock.on('finish', remoteend)
servsock.on('end', remoteend)
socket.on('finish', servsockend)
socket.on('error', servsockend)
socket.on('end', servsockend)
});
server.listen(keyPair);
return keyPair.publicKey;
},
client: (hexPublicKey, port) => {
const publicKey = Buffer.from(hexPublicKey, 'hex');
const server = net.createServer(function (local) {
const socket = node.connect(publicKey);
socket.on('client error', console.error);
pump(local, socket, local);
});
server.listen(port, "127.0.0.1");
return publicKey;
}
};
};