Files
automaker/apps/server/src/routes/setup/routes/auth-claude.ts
DhanushSantosh 1452232409 feat: fix CLI authentication detection to prevent unnecessary browser prompts
- Fix Claude, Codex, and Cursor auth handlers to check if CLI is already authenticated
- Use same detection logic as each provider's internal checkAuth/codexAuthIndicators()
- For Codex: Check for API keys and auth files before requiring manual login
- For Cursor: Check for env var and credentials files before requiring manual auth
- For Claude: Check for cached auth tokens, settings, and credentials files
- If CLI is already authenticated: Just reconnect by removing disconnected marker
- If CLI needs auth: Tell user to manually run login command
- This prevents timeout errors when login commands can't run in non-interactive mode
2026-01-09 21:34:14 +05:30

58 lines
2.0 KiB
TypeScript

/**
* POST /auth-claude endpoint - Auth Claude
*/
import type { Request, Response } from 'express';
import { getErrorMessage, logError } from '../common.js';
import { exec } from 'child_process';
import { promisify } from 'util';
import * as fs from 'fs';
import * as path from 'path';
const execAsync = promisify(exec);
export function createAuthClaudeHandler() {
return async (_req: Request, res: Response): Promise<void> => {
try {
// Remove the disconnected marker file to reconnect the app to the CLI
const markerPath = path.join(process.cwd(), '.automaker', '.claude-disconnected');
if (fs.existsSync(markerPath)) {
fs.unlinkSync(markerPath);
}
// Check if CLI is already authenticated by checking auth indicators
const { getClaudeAuthIndicators } = await import('@automaker/platform');
const indicators = await getClaudeAuthIndicators();
const isAlreadyAuthenticated =
indicators.hasStatsCacheWithActivity ||
(indicators.hasSettingsFile && indicators.hasProjectsSessions) ||
indicators.hasCredentialsFile;
if (isAlreadyAuthenticated) {
// CLI is already authenticated, just reconnect
res.json({
success: true,
message: 'Claude CLI is now linked with the app',
wasAlreadyAuthenticated: true,
});
} else {
// CLI needs authentication - but we can't run claude login here
// because it requires browser OAuth. Just reconnect and let the user authenticate if needed.
res.json({
success: true,
message:
'Claude CLI is now linked with the app. If prompted, please authenticate with "claude login" in your terminal.',
requiresManualAuth: true,
});
}
} catch (error) {
logError(error, 'Auth Claude failed');
res.status(500).json({
success: false,
error: getErrorMessage(error),
message: 'Failed to link Claude CLI with the app',
});
}
};
}