import { login, logout, getAuthStatus, isGhInstalled, } from "../../github/auth.ts"; import { formatAuthSuccess, formatNoToken, formatError, formatInfo, } from "../formatters.ts"; /** * Show GitHub authentication status */ export async function showGitHubAuth(): Promise { const status = await getAuthStatus(); if (!status.authenticated) { console.log(formatNoToken()); console.log(formatInfo("\nRun 'gitforest login' to authenticate with GitHub.")); return; } console.log(formatAuthSuccess(status.user ?? "unknown", undefined)); console.log(formatInfo(` Auth source: ${status.source === "env" ? "environment variable" : "gh CLI"}`)); } /** * Login to GitHub using gh CLI */ export async function loginGitHub(): Promise { // Check if gh is installed const ghInstalled = await isGhInstalled(); if (!ghInstalled) { console.log(formatError("GitHub CLI (gh) is not installed.")); console.log(formatInfo("Install it from: https://cli.github.com")); console.log(formatInfo("\nOr set GITHUB_TOKEN environment variable manually.")); process.exit(1); } // Check if already authenticated const status = await getAuthStatus(); if (status.authenticated) { console.log(formatInfo(`Already logged in as ${status.user ?? "unknown"}`)); console.log(formatInfo("Run 'gitforest logout' first to login as a different user.")); return; } const result = await login(); if (result.success) { console.log(`\n${formatAuthSuccess(result.user ?? "unknown", undefined)}`); console.log(formatInfo("You can now use GitHub features.")); } else { console.log(formatError(`Login failed: ${result.error}`)); process.exit(1); } } /** * Logout from GitHub */ export async function logoutGitHub(): Promise { const status = await getAuthStatus(); if (!status.authenticated) { console.log(formatInfo("Not logged in.")); return; } await logout(); console.log(formatInfo("Logged out successfully.")); }