import { Bridge } from './lib/bridge.js'
// CLI entry point
const args = parseArgs(typeof Pear !== 'undefined' ? Pear.config.args : process.argv.slice(2))
if (args.help) {
console.log(`
bridge-irc — IRC ↔ Keet bidirectional bridge
Usage:
bridge-irc --irc-server <host> --channel <#chan> --keet-room <roomId>
Options:
--irc-server <host> IRC server hostname (required)
--irc-port <port> IRC port (default: 6667, 6697 for TLS)
--irc-nick <nick> IRC nickname (default: keet-bridge)
--irc-password <pass> IRC server password
--channel <#channel> IRC channel to bridge (required)
--tls Use TLS for IRC connection
--keet-room <roomId> Keet room ID to bridge (required)
--keet-port <port> Keet daemon port (default: 3117)
--help Show this help
`)
process.exit(0)
}
if (!args['irc-server'] || !args.channel || !args['keet-room']) {
console.error('Error: --irc-server, --channel, and --keet-room are required')
console.error('Run with --help for usage')
process.exit(1)
}
const bridge = new Bridge({
ircServer: args['irc-server'],
ircPort: parseInt(args['irc-port'] || '6667'),
ircNick: args['irc-nick'] || 'keet-bridge',
ircPassword: args['irc-password'],
ircChannel: args.channel,
ircTls: args.tls || parseInt(args['irc-port'] || '0') === 6697,
keetRoom: args['keet-room'],
keetPort: parseInt(args['keet-port'] || '3117')
})
bridge.start().catch((err) => {
console.error('Bridge failed to start:', err.message)
process.exit(1)
})
// Graceful shutdown
process.on('SIGINT', () => bridge.stop().then(() => process.exit(0)))
process.on('SIGTERM', () => bridge.stop().then(() => process.exit(0)))
function parseArgs (argv) {
const result = {}
for (let i = 0; i < argv.length; i++) {
const arg = argv[i]
if (arg === '--help') {
result.help = true
} else if (arg === '--tls') {
result.tls = true
} else if (arg.startsWith('--')) {
const key = arg.slice(2)
const next = argv[i + 1]
if (next && !next.startsWith('--')) {
result[key] = next
i++
} else {
result[key] = true
}
}
}
return result
}