#!/usr/bin/env bun /** * Facebook Cookie Parser CLI * * Parses Facebook cookie strings into JSON format for the marketplace scraper * * Usage: * bun run scripts/parse-facebook-cookies.ts "c_user=123; xs=abc" * bun run scripts/parse-facebook-cookies.ts --input cookies.txt * echo "c_user=123; xs=abc" | bun run scripts/parse-facebook-cookies.ts * bun run scripts/parse-facebook-cookies.ts "cookie_string" --output my-cookies.json */ import { parseFacebookCookieString } from '../src/facebook'; interface Cookie { name: string; value: string; domain: string; path: string; secure?: boolean; httpOnly?: boolean; sameSite?: "strict" | "lax" | "none" | "unspecified"; expirationDate?: number; storeId?: string; } function parseFacebookCookieStringCLI(cookieString: string): Cookie[] { if (!cookieString || !cookieString.trim()) { console.error('❌ Error: Empty or invalid cookie string provided'); process.exit(1); } const cookies = parseFacebookCookieString(cookieString); if (cookies.length === 0) { console.error('❌ Error: No valid cookies found in input string'); console.error('Expected format: "name1=value1; name2=value2;"'); process.exit(1); } return cookies; } async function main() { const args = process.argv.slice(2); if (args.length === 0 && process.stdin.isTTY === false) { // Read from stdin let input = ''; for await (const chunk of process.stdin) { input += chunk; } input = input.trim(); if (!input) { console.error('❌ Error: No input provided via stdin'); process.exit(1); } const cookies = parseFacebookCookieStringCLI(input); await writeOutput(cookies, './cookies/facebook.json'); return; } let cookieString = ''; let outputPath = './cookies/facebook.json'; let inputPath = ''; // Parse command line arguments for (let i = 0; i < args.length; i++) { const arg = args[i]; if (arg === '--input' || arg === '-i') { inputPath = args[i + 1]; i++; // Skip next arg } else if (arg === '--output' || arg === '-o') { outputPath = args[i + 1]; i++; // Skip next arg } else if (arg === '--help' || arg === '-h') { showHelp(); return; } else if (!arg.startsWith('-')) { // Assume this is the cookie string cookieString = arg; } else { console.error(`❌ Unknown option: ${arg}`); showHelp(); process.exit(1); } } // Read from file if specified if (inputPath) { try { const file = Bun.file(inputPath); if (!(await file.exists())) { console.error(`❌ Error: Input file not found: ${inputPath}`); process.exit(1); } cookieString = await file.text(); } catch (error) { console.error(`❌ Error reading input file: ${error}`); process.exit(1); } } if (!cookieString.trim()) { console.error('❌ Error: No cookie string provided'); console.error('Provide cookie string as argument, --input file, or via stdin'); showHelp(); process.exit(1); } const cookies = parseFacebookCookieStringCLI(cookieString); await writeOutput(cookies, outputPath); } async function writeOutput(cookies: Cookie[], outputPath: string) { try { await Bun.write(outputPath, JSON.stringify(cookies, null, 2)); console.log(`✅ Successfully parsed ${cookies.length} Facebook cookies`); console.log(`📁 Saved to: ${outputPath}`); // Show summary of parsed cookies console.log('\n📋 Parsed cookies:'); for (const cookie of cookies) { console.log(` • ${cookie.name}: ${cookie.value.substring(0, 20)}${cookie.value.length > 20 ? '...' : ''}`); } } catch (error) { console.error(`❌ Error writing to output file: ${error}`); process.exit(1); } } function showHelp() { console.log(` Facebook Cookie Parser CLI Parses Facebook cookie strings into JSON format for the marketplace scraper. USAGE: bun run scripts/parse-facebook-cookies.ts [OPTIONS] [COOKIE_STRING] EXAMPLES: # Parse from command line argument bun run scripts/parse-facebook-cookies.ts "c_user=123; xs=abc" # Parse from file bun run scripts/parse-facebook-cookies.ts --input cookies.txt # Parse from stdin echo "c_user=123; xs=abc" | bun run scripts/parse-facebook-cookies.ts # Output to custom file bun run scripts/parse-facebook-cookies.ts "cookie_string" --output my-cookies.json OPTIONS: -i, --input FILE Read cookie string from file -o, --output FILE Output file path (default: ./cookies/facebook.json) -h, --help Show this help message COOKIE FORMAT: Semicolon-separated name=value pairs Example: "c_user=123456789; xs=abcdef123456; fr=xyz789" OUTPUT: JSON array of cookie objects saved to ./cookies/facebook.json `); } // Run the CLI if (import.meta.main) { main().catch(error => { console.error(`❌ Unexpected error: ${error}`); process.exit(1); }); }