UNPKG

focusflick

Version:

šŸ“ˆ Focus Flick: Plug-and-play web analytics for user focus, scroll, blur, click, and behavior tracking

79 lines (62 loc) • 2.59 kB
#!/usr/bin/env node import fs from 'fs'; import path from 'path'; import open from 'open'; import readline from 'readline'; import chalk from 'chalk'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const FOCUSKEY_PATH = path.resolve(process.cwd(), 'focusKey.json'); const ONBOARD_URL = 'https://www.focusflick.xyz'; if (process.argv.includes('--generate')) { console.log(chalk.cyan('\nšŸš€ Launching FocusFlick registration page...')); try { await open(ONBOARD_URL); console.log(`āœ… If not opened, visit: ${chalk.blue(ONBOARD_URL)}\n`); } catch { console.error(`āŒ Failed to open browser. Please visit ${chalk.blue(ONBOARD_URL)}`); } process.exit(0); } if (!fs.existsSync(FOCUSKEY_PATH)) { console.log(chalk.red('\nāš ļø Missing focusKey.json in this directory.\n')); console.log(`šŸ‘‰ Run ${chalk.yellow('npx focusflick --generate')} to get one.\n`); process.exit(1); } const keyData = JSON.parse(fs.readFileSync(FOCUSKEY_PATH, 'utf-8')); const focusKey = keyData.focusKey; if (!focusKey || !focusKey.startsWith('ff_')) { console.log(chalk.red('āš ļø Invalid focusKey.json format.\n')); process.exit(1); } console.log(chalk.greenBright('\nāœ… focusKey found:'), chalk.yellow(focusKey)); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const ask = q => new Promise(resolve => rl.question(q, resolve)); console.log('\nChoose your integration style:\n'); console.log(`1) šŸ§‘ā€šŸ’¼ ${chalk.cyan('Simple Embed')} (HTML copy-paste)`); console.log(`2) šŸ‘Øā€šŸ’» ${chalk.magenta('Developer Config')} (import & customize)\n`); const style = await ask('Select [1/2]: '); let snippet = ''; if (style.trim() === '1') { snippet = `<script src="https://cdn.focusflick.xyz/focusflick.min.js" data-focuskey="${focusKey}" async></script>`; } else { snippet = `import FocusFlick from 'focusflick'; const flick = new FocusFlick({ focusKey: '${focusKey}', trackMouseMove: true, trackClicks: true, trackScrollDepth: true, idleTimeout: 30000 }); flick.init();`; } console.log(chalk.greenBright('\n✨ Your FocusFlick snippet:\n')); console.log(chalk.gray('----------------------------------------')); console.log(snippet); console.log(chalk.gray('----------------------------------------\n')); const save = await ask('šŸ’¾ Save to focusflick.js? (y/n): '); if (save.trim().toLowerCase() === 'y') { fs.writeFileSync(path.resolve(process.cwd(), 'focusflick.js'), snippet); console.log(chalk.green('āœ… Saved as focusflick.js\n')); } rl.close();