mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-03 21:03:08 +00:00
- 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
58 lines
2.0 KiB
TypeScript
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',
|
|
});
|
|
}
|
|
};
|
|
}
|