UNPKG

buroventures-harald-code

Version:

Harald Code - AI-powered coding assistant CLI

65 lines 2.45 kB
/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import { useState, useCallback, useEffect } from 'react'; import { AuthType, clearCachedCredentialFile, getErrorMessage, } from 'buroventures-harald-code-core'; import { runExitCleanup } from '../../utils/cleanup.js'; export const useAuthCommand = (settings, setAuthError, config) => { const [isAuthDialogOpen, setIsAuthDialogOpen] = useState(settings.merged.selectedAuthType === undefined); const openAuthDialog = useCallback(() => { setIsAuthDialogOpen(true); }, []); const [isAuthenticating, setIsAuthenticating] = useState(false); useEffect(() => { const authFlow = async () => { const authType = settings.merged.selectedAuthType; if (isAuthDialogOpen || !authType) { return; } try { setIsAuthenticating(true); await config.refreshAuth(authType); console.log(`Authenticated via "${authType}".`); } catch (e) { setAuthError(`Failed to login. Message: ${getErrorMessage(e)}`); openAuthDialog(); } finally { setIsAuthenticating(false); } }; void authFlow(); }, [isAuthDialogOpen, settings, config, setAuthError, openAuthDialog]); const handleAuthSelect = useCallback(async (authType, scope) => { if (authType) { await clearCachedCredentialFile(); settings.setValue(scope, 'selectedAuthType', authType); if (authType === AuthType.LOGIN_WITH_GOOGLE && config.isBrowserLaunchSuppressed()) { runExitCleanup(); console.log(` ---------------------------------------------------------------- Logging in with Google... Please restart Gemini CLI to continue. ---------------------------------------------------------------- `); process.exit(0); } } setIsAuthDialogOpen(false); setAuthError(null); }, [settings, setAuthError, config]); const cancelAuthentication = useCallback(() => { setIsAuthenticating(false); }, []); return { isAuthDialogOpen, openAuthDialog, handleAuthSelect, isAuthenticating, cancelAuthentication, }; }; //# sourceMappingURL=useAuthCommand.js.map