UNPKG

@teamwork/get-bearer-token

Version:

CLI tool to obtain bearer tokens for Teamwork API using OAuth flow

66 lines (54 loc) 1.89 kB
#!/usr/bin/env node import { createRequire } from 'module'; import { startServer } from './server.js'; import { getConfig } from './config.js'; import { isAuthenticated } from './auth.js'; import open from 'open'; // ANSI colors (no dependency needed) const bold = (s) => `\x1b[1m${s}\x1b[0m`; const dim = (s) => `\x1b[2m${s}\x1b[0m`; const cyan = (s) => `\x1b[36m${s}\x1b[0m`; const green = (s) => `\x1b[32m${s}\x1b[0m`; const yellow = (s) => `\x1b[33m${s}\x1b[0m`; const red = (s) => `\x1b[31m${s}\x1b[0m`; const require = createRequire(import.meta.url); const { version } = require('../package.json'); const config = getConfig(); const port = config.port; try { const server = await startServer({ port, version }); const baseUrl = `http://127.0.0.1:${port}`; console.log(); console.log(` ${bold('Teamwork Bearer Token Generator')} ${dim(`v${version}`)}`); console.log(); console.log(` ${dim('➜')} Local: ${cyan(baseUrl)}`); console.log(); if (isAuthenticated()) { console.log(` ${green('✓')} Already authenticated, opening browser...`); await open(baseUrl); } else { console.log(` ${yellow('●')} Opening browser for Teamwork authentication...`); await open(`${baseUrl}/api/auth/login`); } console.log(` ${dim('Press Ctrl+C to stop')}`); console.log(); process.on('SIGINT', () => { console.log(`\n ${dim('Shutting down...')}\n`); server.close(); process.exit(0); }); process.on('SIGTERM', () => { server.close(); process.exit(0); }); } catch (error) { console.log(); if (error.code === 'EADDRINUSE') { console.error(` ${red('✗')} Port ${port} is already in use.`); console.error(` Try: ${cyan(`PORT=${port + 1} npx --yes @teamwork/get-bearer-token@latest`)}`); } else { console.error(` ${red('✗')} ${error.message}`); } console.log(); process.exit(1); }