/**
* get_user tool handler
*/
import { ValidationError } from "../errors/index.js";
import { GetUserInputSchema } from "../schemas/index.js";
import { apiClient } from "../services/hn-api-client.js";
import type { GetUserInput } from "../types/index.js";
import { calculateAccountAge, calculateKarmaPerYear, formatToolResponse } from "../utils/index.js";
/**
* Handle get_user tool call
*/
export async function handleGetUser(args: unknown) {
// Validate input
const parseResult = GetUserInputSchema.safeParse(args);
if (!parseResult.success) {
throw new ValidationError("Invalid username", parseResult.error.errors);
}
const input: GetUserInput = parseResult.data;
// Get user from API
const user = await apiClient.getUser(input.username);
// Calculate computed fields
const accountAgeYears = calculateAccountAge(user.created_at_i);
const karmaPerYear = calculateKarmaPerYear(user.karma, user.created_at_i);
// Format response
const response = {
user: {
username: user.username,
karma: user.karma,
about: user.about,
created_at: user.created_at,
created_at_i: user.created_at_i,
},
computed: {
accountAgeYears,
karmaPerYear,
accountStatus: user.karma > 10000 ? "highly active" : user.karma > 1000 ? "active" : "casual",
},
remainingQuota: apiClient.getRemainingQuota(),
};
return formatToolResponse(response);
}