import { VergeApiClient } from '../client/api.js';
import { AuthManager } from '../auth/index.js';
import { LoginToolInput, UpdateUserToolInput } from './schemas.js';
/**
* verge_browser_login ツール
* ブラウザを開いてOAuth認証を行う
*
* @param authManager 認証マネージャー
* @param apiClient APIクライアント
* @returns 認証結果
*/
export async function handleBrowserLogin(authManager: AuthManager, apiClient: VergeApiClient) {
try {
const result = await authManager.authenticate();
// APIクライアントにトークンを設定
apiClient.setToken(result.token);
return {
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: true,
message: 'ブラウザ認証に成功しました',
email: result.email,
},
null,
2
),
},
],
};
} catch (error) {
return {
isError: true,
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: false,
error: error instanceof Error ? error.message : String(error),
},
null,
2
),
},
],
};
}
}
/**
* verge_login ツール
* メールアドレスとパスワードでログインし、JWTトークンを取得
*
* @param input ログイン情報
* @param apiClient APIクライアント
* @returns ログイン結果 (トークンとユーザー情報)
*/
export async function handleLogin(input: LoginToolInput, apiClient: VergeApiClient) {
try {
const response = await apiClient.login(input.email, input.password);
return {
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: true,
message: 'ログインに成功しました',
token: response.token,
user: {
id: response.user.id,
email: response.user.email,
name: response.user.name,
role: response.user.role,
},
},
null,
2
),
},
],
};
} catch (error) {
return {
isError: true,
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: false,
error: error instanceof Error ? error.message : String(error),
},
null,
2
),
},
],
};
}
}
/**
* verge_get_current_user ツール
* 現在ログイン中のユーザー情報を取得
*
* @param apiClient APIクライアント
* @returns 現在のユーザー情報
*/
export async function handleGetCurrentUser(apiClient: VergeApiClient) {
try {
const user = await apiClient.getCurrentUser();
return {
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: true,
user: {
id: user.id,
email: user.email,
name: user.name,
role: user.role,
password_change_required: user.password_change_required,
created_at: user.created_at,
},
},
null,
2
),
},
],
};
} catch (error) {
return {
isError: true,
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: false,
error: error instanceof Error ? error.message : String(error),
},
null,
2
),
},
],
};
}
}
/**
* verge_update_user ツール
* ユーザー情報を更新
*
* @param input 更新情報
* @param apiClient APIクライアント
* @returns 更新後のユーザー情報
*/
export async function handleUpdateUser(input: UpdateUserToolInput, apiClient: VergeApiClient) {
try {
const { user_id, ...updateData } = input;
const user = await apiClient.updateUser(user_id, updateData);
return {
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: true,
message: 'ユーザー情報を更新しました',
user: {
id: user.id,
email: user.email,
name: user.name,
role: user.role,
password_change_required: user.password_change_required,
created_at: user.created_at,
},
},
null,
2
),
},
],
};
} catch (error) {
return {
isError: true,
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: false,
error: error instanceof Error ? error.message : String(error),
},
null,
2
),
},
],
};
}
}
/**
* verge_logout ツール
* 保存されたトークンを削除してログアウト
*
* @param authManager 認証マネージャー
* @returns ログアウト結果
*/
export async function handleLogout(authManager: AuthManager) {
try {
await authManager.logout();
return {
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: true,
message: 'ログアウトしました。保存されたトークンを削除しました。',
},
null,
2
),
},
],
};
} catch (error) {
return {
isError: true,
content: [
{
type: 'text' as const,
text: JSON.stringify(
{
success: false,
error: error instanceof Error ? error.message : String(error),
},
null,
2
),
},
],
};
}
}