/ src / cli / outreach.js
outreach.js
 1  #!/usr/bin/env node
 2  
 3  /**
 4   * Outreach Stage CLI
 5   */
 6  
 7  import '../utils/load-env.js';
 8  import { runOutreachStage, getOutreachStats, retryFailedOutreaches } from '../stages/outreach.js';
 9  import { parseFlags } from '../utils/flag-parser.js';
10  import Logger from '../utils/logger.js';
11  
12  const logger = new Logger('OutreachCLI');
13  
14  async function main() {
15    const command = process.argv[2];
16  
17    try {
18      if (command === 'stats') {
19        const stats = getOutreachStats();
20        console.log('\nOutreach Statistics:');
21        console.log(`Total Outreaches: ${stats.total_outreaches}`);
22        console.log(`Pending: ${stats.pending}`);
23        console.log(`Sent: ${stats.sent}`);
24        console.log(`Delivered: ${stats.delivered}`);
25        console.log(`Failed: ${stats.failed}`);
26        console.log(`Opened: ${stats.opened}`);
27        console.log(`Clicked: ${stats.clicked}`);
28        console.log('\nBy Channel:');
29        for (const [channel, count] of Object.entries(stats.byChannel)) {
30          console.log(`  ${channel}: ${count}`);
31        }
32      } else if (command === 'retry') {
33        const limit = parseInt(process.argv[3] || '10', 10);
34        await retryFailedOutreaches(limit);
35      } else {
36        const { limit } = parseFlags();
37        const channel = process.argv.find(arg =>
38          ['sms', 'email', 'form', 'x', 'linkedin'].includes(arg)
39        );
40        await runOutreachStage({ limit, channel: channel || 'auto' });
41      }
42    } catch (err) {
43      logger.error(err.message);
44      process.exit(1);
45    }
46  }
47  
48  main();