UNPKG

@monsoft/mcp-github-project-manager

Version:

A Model Context Protocol GitHub Project Manager implementation

123 lines (122 loc) 3.49 kB
import { Octokit } from '@octokit/rest'; import { handleGitHubError } from '../errors/index.js'; /** * Service for managing GitHub milestones */ export class GitHubMilestoneService { /** * Create a new GitHub Milestone Service * @param token GitHub API token */ constructor(token) { this.octokit = new Octokit({ auth: token, }); } /** * Create a new milestone in a GitHub repository * @param params Milestone creation parameters * @returns The created milestone */ async createMilestone(params) { try { const { owner, repo, title, description, due_on, state } = params; const response = await this.octokit.issues.createMilestone({ owner, repo, title, description, due_on, state, }); return response.data; } catch (error) { throw handleGitHubError(error); } } /** * Update an existing milestone in a GitHub repository * @param params Milestone update parameters * @returns The updated milestone */ async updateMilestone(params) { try { const { owner, repo, milestone_number, title, description, due_on, state } = params; const response = await this.octokit.issues.updateMilestone({ owner, repo, milestone_number, title, description, due_on, state, }); return response.data; } catch (error) { throw handleGitHubError(error); } } /** * Get a milestone from a GitHub repository * @param params Milestone retrieval parameters * @returns The requested milestone */ async getMilestone(params) { try { const { owner, repo, milestone_number } = params; const response = await this.octokit.issues.getMilestone({ owner, repo, milestone_number, }); return response.data; } catch (error) { throw handleGitHubError(error); } } /** * List milestones in a GitHub repository * @param params Milestone listing parameters * @returns List of milestones */ async listMilestones(params) { try { const { owner, repo, state, sort, direction, per_page, page } = params; const response = await this.octokit.issues.listMilestones({ owner, repo, state, sort, direction, per_page, page, }); return response.data; } catch (error) { throw handleGitHubError(error); } } /** * Delete a milestone from a GitHub repository * @param owner Repository owner * @param repo Repository name * @param milestone_number Milestone number * @returns void */ async deleteMilestone(owner, repo, milestone_number) { try { await this.octokit.issues.deleteMilestone({ owner, repo, milestone_number, }); } catch (error) { throw handleGitHubError(error); } } }