user-handlers.tsā¢2.6 kB
import { JiraApiClient } from '../utils/api-client.js';
import { JiraFormatters } from '../utils/formatters.js';
export class UserHandlers {
constructor(private apiClient: JiraApiClient) {}
async handleSearchUsers(args: any) {
try {
const { query, maxResults = 50 } = args;
if (!query) {
throw new Error('query is required');
}
const params = {
query,
maxResults,
};
const users = await this.apiClient.get('/user/search', params);
if (!users || users.length === 0) {
return {
content: [
{
type: 'text',
text: `No users found matching "${query}"`,
},
],
};
}
let response = `# User Search Results\n\n**Query**: ${query}\n**Found**: ${users.length} user(s)\n\n`;
users.forEach((user: any) => {
response += `## ${user.displayName}\n`;
response += `- **Email**: ${user.emailAddress || 'N/A'}\n`;
response += `- **Account ID**: \`${user.accountId}\`\n`;
response += `- **Active**: ${user.active ? 'Yes' : 'No'}\n`;
response += `- **Account Type**: ${user.accountType || 'N/A'}\n\n`;
});
response += `\nš” Use the **Account ID** when assigning issues.`;
return {
content: [
{
type: 'text',
text: response,
},
],
};
} catch (error: any) {
return {
content: [
{
type: 'text',
text: JiraFormatters.formatError(error),
},
],
isError: true,
};
}
}
/**
* Helper function to resolve email to account ID
* Returns the account ID if found, otherwise returns the original value
*/
async resolveUserToAccountId(emailOrAccountId: string): Promise<string> {
// If it already looks like an account ID (contains colon), return as-is
if (emailOrAccountId.includes(':')) {
return emailOrAccountId;
}
// If it looks like an email, try to look it up
if (emailOrAccountId.includes('@')) {
try {
const users = await this.apiClient.get('/user/search', {
query: emailOrAccountId,
maxResults: 1,
});
if (users && users.length > 0) {
return users[0].accountId;
}
} catch (error) {
// If lookup fails, return the original value
// This will let Jira return a proper error message
}
}
// Return as-is (might be account ID without colon, or username)
return emailOrAccountId;
}
}