mirror of
https://github.com/webtorrent/bittorrent-tracker.git
synced 2024-12-13 02:46:29 +00:00
e6d3189edf
BREAKING CHANGE: ESM only * feat: esm * fix: linter oops
145 lines
4.0 KiB
JavaScript
Executable File
145 lines
4.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
import minimist from 'minimist'
|
|
import { Server } from '../index.js'
|
|
|
|
const argv = minimist(process.argv.slice(2), {
|
|
alias: {
|
|
h: 'help',
|
|
p: 'port',
|
|
q: 'quiet',
|
|
s: 'silent',
|
|
v: 'version'
|
|
},
|
|
boolean: [
|
|
'help',
|
|
'http',
|
|
'quiet',
|
|
'silent',
|
|
'trust-proxy',
|
|
'udp',
|
|
'version',
|
|
'ws',
|
|
'stats'
|
|
],
|
|
string: [
|
|
'http-hostname',
|
|
'udp-hostname',
|
|
'udp6-hostname'
|
|
],
|
|
default: {
|
|
port: 8000,
|
|
stats: true
|
|
}
|
|
})
|
|
|
|
if (argv.version) {
|
|
console.log(require('../package.json').version)
|
|
process.exit(0)
|
|
}
|
|
|
|
if (argv.help) {
|
|
console.log((() => {
|
|
/*
|
|
bittorrent-tracker - Start a bittorrent tracker server
|
|
|
|
Usage:
|
|
bittorrent-tracker [OPTIONS]
|
|
|
|
If no --http, --udp, or --ws option is supplied, all tracker types will be started.
|
|
|
|
Options:
|
|
-p, --port [number] change the port [default: 8000]
|
|
--http-hostname [string] change the http server hostname [default: '::']
|
|
--udp-hostname [string] change the udp hostname [default: '0.0.0.0']
|
|
--udp6-hostname [string] change the udp6 hostname [default: '::']
|
|
--trust-proxy trust 'x-forwarded-for' header from reverse proxy
|
|
--interval client announce interval (ms) [default: 600000]
|
|
--http enable http server
|
|
--udp enable udp server
|
|
--ws enable websocket server
|
|
--stats enable web-based statistics (default: true)
|
|
-q, --quiet only show error output
|
|
-s, --silent show no output
|
|
-v, --version print the current version
|
|
|
|
*/
|
|
}).toString().split(/\n/).slice(2, -2).join('\n'))
|
|
process.exit(0)
|
|
}
|
|
|
|
if (argv.silent) argv.quiet = true
|
|
|
|
const allFalsy = !argv.http && !argv.udp && !argv.ws
|
|
|
|
argv.http = allFalsy || argv.http
|
|
argv.udp = allFalsy || argv.udp
|
|
argv.ws = allFalsy || argv.ws
|
|
|
|
const server = new Server({
|
|
http: argv.http,
|
|
interval: argv.interval,
|
|
stats: argv.stats,
|
|
trustProxy: argv['trust-proxy'],
|
|
udp: argv.udp,
|
|
ws: argv.ws
|
|
})
|
|
|
|
server.on('error', err => {
|
|
if (!argv.silent) console.error(`ERROR: ${err.message}`)
|
|
})
|
|
server.on('warning', err => {
|
|
if (!argv.quiet) console.log(`WARNING: ${err.message}`)
|
|
})
|
|
server.on('update', addr => {
|
|
if (!argv.quiet) console.log(`update: ${addr}`)
|
|
})
|
|
server.on('complete', addr => {
|
|
if (!argv.quiet) console.log(`complete: ${addr}`)
|
|
})
|
|
server.on('start', addr => {
|
|
if (!argv.quiet) console.log(`start: ${addr}`)
|
|
})
|
|
server.on('stop', addr => {
|
|
if (!argv.quiet) console.log(`stop: ${addr}`)
|
|
})
|
|
|
|
const hostname = {
|
|
http: argv['http-hostname'],
|
|
udp4: argv['udp-hostname'],
|
|
udp6: argv['udp6-hostname']
|
|
}
|
|
|
|
server.listen(argv.port, hostname, () => {
|
|
if (server.http && argv.http && !argv.quiet) {
|
|
const httpAddr = server.http.address()
|
|
const httpHost = httpAddr.address !== '::' ? httpAddr.address : 'localhost'
|
|
const httpPort = httpAddr.port
|
|
console.log(`HTTP tracker: http://${httpHost}:${httpPort}/announce`)
|
|
}
|
|
if (server.udp && !argv.quiet) {
|
|
const udpAddr = server.udp.address()
|
|
const udpHost = udpAddr.address
|
|
const udpPort = udpAddr.port
|
|
console.log(`UDP tracker: udp://${udpHost}:${udpPort}`)
|
|
}
|
|
if (server.udp6 && !argv.quiet) {
|
|
const udp6Addr = server.udp6.address()
|
|
const udp6Host = udp6Addr.address !== '::' ? udp6Addr.address : 'localhost'
|
|
const udp6Port = udp6Addr.port
|
|
console.log(`UDP6 tracker: udp://${udp6Host}:${udp6Port}`)
|
|
}
|
|
if (server.ws && !argv.quiet) {
|
|
const wsAddr = server.http.address()
|
|
const wsHost = wsAddr.address !== '::' ? wsAddr.address : 'localhost'
|
|
const wsPort = wsAddr.port
|
|
console.log(`WebSocket tracker: ws://${wsHost}:${wsPort}`)
|
|
}
|
|
if (server.http && argv.stats && !argv.quiet) {
|
|
const statsAddr = server.http.address()
|
|
const statsHost = statsAddr.address !== '::' ? statsAddr.address : 'localhost'
|
|
const statsPort = statsAddr.port
|
|
console.log(`Tracker stats: http://${statsHost}:${statsPort}/stats`)
|
|
}
|
|
})
|