Skip to main content
Glama
pullRequest.service.ts6.03 kB
import GitHubClient from '#services/api'; import { sanitize } from '../../utils/sanitize.js'; // --- Interfaces para Opciones de Métodos --- export interface GetPullRequestOptions { owner: string; repo: string; pullNumber: number; } export interface ListPullRequestsOptions { owner: string; repo: string; state?: string; sort?: string; direction?: string; perPage?: number; page?: number; fields?: string[]; } export interface MergePullRequestOptions { owner: string; repo: string; pullNumber: number; commitMessage?: string; commit_title?: string; merge_method?: string; } export interface GetPullRequestFilesOptions { owner: string; repo: string; pullNumber: number; } export interface GetPullRequestStatusOptions { owner: string; repo: string; pullNumber: number; } export interface UpdatePullRequestBranchOptions { owner: string; repo: string; pullNumber: number; expected_head_sha?: string; } export interface GetPullRequestCommentsOptions { owner: string; repo: string; pullNumber: number; } export interface GetPullRequestReviewsOptions { owner: string; repo: string; pullNumber: number; } export interface CreatePullRequestReviewOptions { owner: string; repo: string; pullNumber: number; body?: string; event?: string; commitId?: string; comments?: string[]; } export interface CreatePullRequestOptions { owner: string; repo: string; title: string; head: string; base: string; body?: string; draft?: boolean; maintainer_can_modify?: boolean; } export interface AddPullRequestReviewCommentOptions { owner: string; repo: string; pullNumber: number; body: string; path: string; commit_id?: string; in_reply_to?: number; subject_type?: string; line?: number; side?: string; start_line?: number; start_side?: string; } export interface UpdatePullRequestOptions { owner: string; repo: string; pullNumber: number; title?: string; body?: string; state?: string; base?: string; maintainer_can_modify?: boolean; } class PullRequest extends GitHubClient { async getPullRequest(options: GetPullRequestOptions, token: string) { const { owner, repo, pullNumber } = options; return this.get(`repos/${owner}/${repo}/pulls/${pullNumber}`, {}, token); } async getListPullRequests(options: ListPullRequestsOptions, token: string) { const { owner, repo, fields, ...params } = options; const payload = { state: "open", per_page: 5, page: 1, ...params }; const results = await this.get(`repos/${owner}/${repo}/pulls`, payload, token); if (fields?.length) { return (results as any[]).map((item: any) => { const filteredItem: { [key: string]: any } = {}; fields.forEach((field: string) => { if (item.hasOwnProperty(field)) filteredItem[field] = item[field]; }); return filteredItem; }); } return results; } async mergePullRequest(options: MergePullRequestOptions, token: string) { const { owner, repo, pullNumber, ...payload } = options; if (payload.commit_title) payload.commit_title = sanitize(payload.commit_title); if (payload.commitMessage) payload.commitMessage = sanitize(payload.commitMessage); return this.put(`repos/${owner}/${repo}/pulls/${pullNumber}/merge`, payload, token); } async getPullRequestFiles(options: GetPullRequestFilesOptions, token: string) { const { owner, repo, pullNumber } = options; return this.get(`repos/${owner}/${repo}/pulls/${pullNumber}/files`, {}, token); } async getPullRequestStatus(options: GetPullRequestStatusOptions, token: string) { const { owner, repo, pullNumber } = options; return this.get(`repos/${owner}/${repo}/pulls/${pullNumber}/merge`, {}, token); } async updatePullRequestBranch(options: UpdatePullRequestBranchOptions, token: string) { const { owner, repo, pullNumber, ...params } = options; return this.put(`repos/${owner}/${repo}/pulls/${pullNumber}/update-branch`, params, token); } async getPullRequestComments(options: GetPullRequestCommentsOptions, token: string) { const { owner, repo, pullNumber } = options; return this.get(`repos/${owner}/${repo}/pulls/${pullNumber}/comments`, {}, token); } async getPullRequestReviews(options: GetPullRequestReviewsOptions, token: string) { const { owner, repo, pullNumber } = options; return this.get(`repos/${owner}/${repo}/pulls/${pullNumber}/reviews`, {}, token); } async createPullRequestReview(options: CreatePullRequestReviewOptions, token: string) { const { owner, repo, pullNumber, commitId, ...rest } = options; const payload: any = { ...rest }; if (payload.body) payload.body = sanitize(payload.body); if (commitId) payload.commit_id = commitId; return this.post(`repos/${owner}/${repo}/pulls/${pullNumber}/reviews`, payload, token); } async createPullRequest(options: CreatePullRequestOptions, token: string) { const { owner, repo, ...payload } = options; if (payload.title) payload.title = sanitize(payload.title); if (payload.body) payload.body = sanitize(payload.body); return this.post(`repos/${owner}/${repo}/pulls`, payload, token); } async addPullRequestReviewComment(options: AddPullRequestReviewCommentOptions, token: string) { const { owner, repo, pullNumber, ...payload } = options; if (payload.body) payload.body = sanitize(payload.body); return this.post(`repos/${owner}/${repo}/pulls/${pullNumber}/comments`, payload, token); } async updatePullRequest(options: UpdatePullRequestOptions, token: string) { const { owner, repo, pullNumber, ...payload } = options; if (payload.title) payload.title = sanitize(payload.title); if (payload.body) payload.body = sanitize(payload.body); return this.patch(`repos/${owner}/${repo}/pulls/${pullNumber}`, payload, token); } } export default PullRequest;

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JesusMaster/github-see-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server