OverviewFilesCommitsIssuesDocsReleasesPeers

hyper-social / bridge-email / index.js

87 lines · javascript ref:
import { EmailBridge } from './lib/bridge.js'
import { ImapClient, parseEmail } from './lib/imap-client.js'
import { SmtpClient } from './lib/smtp-client.js'
import { KeetClient } from './lib/keet-client.js'
import { Router } from './lib/router.js'
import { emailToEnvelope, keetToEmail, emailToKeetText, keetToEmailText, extractEmail, extractName } from './lib/adapter.js'

export {
  EmailBridge,
  ImapClient,
  SmtpClient,
  KeetClient,
  Router,
  parseEmail,
  emailToEnvelope,
  keetToEmail,
  emailToKeetText,
  keetToEmailText,
  extractEmail,
  extractName
}

// CLI entry point
const args = process.argv.slice(2)
if (args.includes('--help') || args.includes('-h')) {
  console.log(`bridge-email — Email ↔ Keet bridge

Usage:
  bridge-email --imap-host <host> --smtp-host <host> --user <email> --pass <password> --keet-room <roomId> [options]

Options:
  --imap-host <host>    IMAP server hostname
  --imap-port <port>    IMAP port (default: 993)
  --smtp-host <host>    SMTP server hostname
  --smtp-port <port>    SMTP port (default: 465)
  --user <email>        Email username/address
  --pass <password>     Email password (or EMAIL_PASS env)
  --forward-to <email>  Address to relay Keet messages to
  --keet-room <roomId>  Keet room ID to bridge
  --keet-port <port>    Keet daemon port (default: 3117)
  --poll-interval <ms>  IMAP poll interval in ms (default: 30000)
  --help                Show this help`)
  process.exit(0)
}

function getArg (flag) {
  const idx = args.indexOf(flag)
  return idx !== -1 ? args[idx + 1] : null
}

const imapHost = getArg('--imap-host')
const smtpHost = getArg('--smtp-host')
const user = getArg('--user')
const pass = getArg('--pass') || process.env.EMAIL_PASS
const roomId = getArg('--keet-room')
const keetPort = parseInt(getArg('--keet-port') || '3117', 10)
const forwardTo = getArg('--forward-to')
const pollInterval = parseInt(getArg('--poll-interval') || '30000', 10)
const imapPort = parseInt(getArg('--imap-port') || '993', 10)
const smtpPort = parseInt(getArg('--smtp-port') || '465', 10)

if (imapHost && smtpHost && user && pass && roomId) {
  const bridge = new EmailBridge({
    imapHost,
    imapPort,
    smtpHost,
    smtpPort,
    user,
    pass,
    roomId,
    forwardTo,
    keetPort,
    pollInterval,
    onLog: (msg) => console.log(`[email-bridge] ${msg}`)
  })

  bridge.start().catch(err => {
    console.error('Bridge failed to start:', err.message)
    process.exit(1)
  })

  process.on('SIGINT', () => {
    bridge.stop()
    process.exit(0)
  })
}