buroventures-harald-code
Version:
Harald Code - AI-powered coding assistant CLI
65 lines • 2.45 kB
JavaScript
/**
* @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