hyproxy
Version:
Proxy TCP connections over hypercore-protocol
57 lines (47 loc) • 1.66 kB
JavaScript
const minimist = require('minimist')
const HyperProxy = require('.')
const USAGE = `USAGE: hyproxy [options] <listen|connect>
Options in listen mode:
-p, --port Port to proxy to (required)
-h, --host Hostname to proxy to (default: localhost)
-s, --storage Storage directory to persist keys across restarts (optional)
Options in connect mode:
-k, --key Key to connect to (required)
-p, --port Port for local proxy server (default: 9999)
-h, --host Hostname for local proxy server (default: localhost)
`
const argv = minimist(process.argv.slice(2), {
alias: {
p: 'port',
h: 'host',
k: 'key',
s: 'storage'
}
})
const mode = argv._[0]
if (!mode) onerror()
main(mode, argv).catch(onerror)
async function main (mode, opts) {
const proxies = new HyperProxy({ storage: opts.storage })
if (mode === 'connect') {
const proxy = await proxies.outbound(opts.key, opts.port, opts.host)
console.log(`Connected to hyproxy://${proxy.key.toString('hex')}.`)
console.log(`Local proxy listening on ${proxy.host}:${proxy.port}`)
} else if (mode === 'listen') {
const proxy = await proxies.inbound(opts.key, opts.port, opts.host)
console.log(`Inbound proxy to ${proxy.host}:${proxy.port} listening.`)
console.log(`Access link: hyproxy://${proxy.key.toString('hex')}`)
} else {
throw new Error(`Invalid mode: ${mode}`)
}
// wait forever or until an error occurs
await new Promise((resolve, reject) => {
proxies.once('error', reject)
})
}
function onerror (err) {
if (err) console.error('[error] ' + err.message)
else console.error(USAGE)
process.exit(1)
}