#!/usr/bin/env node import { Command } from 'commander'; import { version } from './lib/version.js'; import { registerUserCommands } from './commands/user.js'; import { registerTweetCommands } from './commands/tweets.js'; import { registerSearchCommands } from './commands/search.js'; import { registerTimelineCommands } from './commands/timeline.js'; import { registerAuthCommands } from './commands/auth.js'; import { registerQueryIdCommands } from './commands/query-ids.js'; import { registerDMCommands } from './commands/dms.js'; import { registerListCommands } from './commands/lists.js'; import { registerNotificationCommands } from './commands/notifications.js'; const program = new Command(); program .name('xfetch') .description('Fast X/Twitter CLI scraper. No API keys. Just cookies and go.') .version(version, '-v, --version'); // Global options program .option('--auth-token ', 'Set auth_token cookie directly') .option('--ct0 ', 'Set ct0 cookie directly') .option('--cookie-source ', 'Cookie source (chrome, firefox, safari, arc, brave)') .option('--chrome-profile ', 'Chrome profile name') .option('--format ', 'Output format (json, jsonl, csv, sqlite)', 'json') .option('--db ', 'SQLite database path (use with --format sqlite)') .option('--proxy ', 'Proxy URL') .option('--proxy-file ', 'Proxy rotation file') .option('--timeout ', 'Request timeout in ms', '30000') .option('--delay ', 'Delay between requests in ms', '500') .option('--no-color', 'Disable colored output') .option('--json', 'Output raw JSON (shorthand for --format json)') .option('--plain', 'Plain output, no formatting'); // Register command groups registerAuthCommands(program); registerUserCommands(program); registerTweetCommands(program); registerSearchCommands(program); registerTimelineCommands(program); registerNotificationCommands(program); registerListCommands(program); registerDMCommands(program); registerQueryIdCommands(program); // Parse and execute program.parse();