@teamwork/get-bearer-token
Version:
CLI tool to obtain bearer tokens for Teamwork API using OAuth flow
66 lines (54 loc) • 1.89 kB
JavaScript
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);
}