UNPKG

macro_api

Version:

A comprehensive, production-ready API toolkit for various services including Stripe, Slack, SendGrid, Vercel, AWS S3, Docker Hub, and more.

400 lines (399 loc) 13.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.GitHubAPI = void 0; const axios_1 = __importDefault(require("axios")); /** * Complete GitHub API wrapper for interacting with all GitHub endpoints */ class GitHubAPI { /** * Create a new GitHub API client * @param options Authentication options */ constructor(options) { this.baseUrl = 'https://api.github.com'; this.token = options.token; } /** * Make a request to the GitHub API * @param method HTTP method * @param endpoint API endpoint * @param data Optional request body * @param params Optional query parameters */ async request(method, endpoint, data, params) { const response = await (0, axios_1.default)({ method, url: `${this.baseUrl}${endpoint}`, data, params, headers: { 'Authorization': `token ${this.token}`, 'Accept': 'application/vnd.github.v3+json', 'Content-Type': 'application/json' } }); return response.data; } // User endpoints /** * Get authenticated user information */ async getAuthenticatedUser() { return this.request('get', '/user'); } /** * Get user by username * @param username GitHub username */ async getUser(username) { return this.request('get', `/users/${username}`); } /** * Get user's repositories * @param username GitHub username * @param params Pagination parameters */ async getUserRepos(username, params) { return this.request('get', `/users/${username}/repos`, undefined, params); } /** * Get user's organizations * @param username GitHub username * @param params Pagination parameters */ async getUserOrgs(username, params) { return this.request('get', `/users/${username}/orgs`, undefined, params); } // Repository endpoints /** * Get repository by owner and repo name * @param owner Repository owner (user or organization) * @param repo Repository name */ async getRepo(owner, repo) { return this.request('get', `/repos/${owner}/${repo}`); } /** * Create a new repository * @param data Repository creation data * @param org Optional organization name (if creating under an organization) */ async createRepo(data, org) { const endpoint = org ? `/orgs/${org}/repos` : '/user/repos'; return this.request('post', endpoint, data); } /** * Update a repository * @param owner Repository owner (user or organization) * @param repo Repository name * @param data Repository update data */ async updateRepo(owner, repo, data) { return this.request('patch', `/repos/${owner}/${repo}`, data); } /** * Delete a repository * @param owner Repository owner (user or organization) * @param repo Repository name */ async deleteRepo(owner, repo) { return this.request('delete', `/repos/${owner}/${repo}`); } /** * List repository branches * @param owner Repository owner (user or organization) * @param repo Repository name * @param params Pagination parameters */ async getRepoBranches(owner, repo, params) { return this.request('get', `/repos/${owner}/${repo}/branches`, undefined, params); } /** * Get branch details * @param owner Repository owner (user or organization) * @param repo Repository name * @param branch Branch name */ async getBranch(owner, repo, branch) { return this.request('get', `/repos/${owner}/${repo}/branches/${branch}`); } // Content endpoints /** * Get contents of a file or directory * @param owner Repository owner (user or organization) * @param repo Repository name * @param path Path to the file or directory * @param ref Git reference (branch, tag, or commit SHA) */ async getContents(owner, repo, path, ref) { return this.request('get', `/repos/${owner}/${repo}/contents/${path}`, undefined, { ref }); } /** * Create or update a file * @param owner Repository owner (user or organization) * @param repo Repository name * @param path Path to the file * @param data File creation/update data */ async createOrUpdateFile(owner, repo, path, data) { return this.request('put', `/repos/${owner}/${repo}/contents/${path}`, data); } /** * Delete a file * @param owner Repository owner (user or organization) * @param repo Repository name * @param path Path to the file * @param data File deletion data */ async deleteFile(owner, repo, path, data) { return this.request('delete', `/repos/${owner}/${repo}/contents/${path}`, data); } // Pull Request endpoints /** * List pull requests * @param owner Repository owner (user or organization) * @param repo Repository name * @param params Query parameters */ async getPullRequests(owner, repo, params) { return this.request('get', `/repos/${owner}/${repo}/pulls`, undefined, params); } /** * Get a pull request * @param owner Repository owner (user or organization) * @param repo Repository name * @param pullNumber Pull request number */ async getPullRequest(owner, repo, pullNumber) { return this.request('get', `/repos/${owner}/${repo}/pulls/${pullNumber}`); } /** * Create a pull request * @param owner Repository owner (user or organization) * @param repo Repository name * @param data Pull request creation data */ async createPullRequest(owner, repo, data) { return this.request('post', `/repos/${owner}/${repo}/pulls`, data); } /** * Update a pull request * @param owner Repository owner (user or organization) * @param repo Repository name * @param pullNumber Pull request number * @param data Pull request update data */ async updatePullRequest(owner, repo, pullNumber, data) { return this.request('patch', `/repos/${owner}/${repo}/pulls/${pullNumber}`, data); } /** * Merge a pull request * @param owner Repository owner (user or organization) * @param repo Repository name * @param pullNumber Pull request number * @param data Merge data */ async mergePullRequest(owner, repo, pullNumber, data) { return this.request('put', `/repos/${owner}/${repo}/pulls/${pullNumber}/merge`, data); } // Issues endpoints /** * List issues * @param owner Repository owner (user or organization) * @param repo Repository name * @param params Query parameters */ async getIssues(owner, repo, params) { return this.request('get', `/repos/${owner}/${repo}/issues`, undefined, params); } /** * Get an issue * @param owner Repository owner (user or organization) * @param repo Repository name * @param issueNumber Issue number */ async getIssue(owner, repo, issueNumber) { return this.request('get', `/repos/${owner}/${repo}/issues/${issueNumber}`); } /** * Create an issue * @param owner Repository owner (user or organization) * @param repo Repository name * @param data Issue creation data */ async createIssue(owner, repo, data) { return this.request('post', `/repos/${owner}/${repo}/issues`, data); } /** * Update an issue * @param owner Repository owner (user or organization) * @param repo Repository name * @param issueNumber Issue number * @param data Issue update data */ async updateIssue(owner, repo, issueNumber, data) { return this.request('patch', `/repos/${owner}/${repo}/issues/${issueNumber}`, data); } // Comments endpoints /** * List issue comments * @param owner Repository owner (user or organization) * @param repo Repository name * @param issueNumber Issue number * @param params Pagination parameters */ async getIssueComments(owner, repo, issueNumber, params) { return this.request('get', `/repos/${owner}/${repo}/issues/${issueNumber}/comments`, undefined, params); } /** * Create an issue comment * @param owner Repository owner (user or organization) * @param repo Repository name * @param issueNumber Issue number * @param data Comment data */ async createIssueComment(owner, repo, issueNumber, data) { return this.request('post', `/repos/${owner}/${repo}/issues/${issueNumber}/comments`, data); } /** * Update an issue comment * @param owner Repository owner (user or organization) * @param repo Repository name * @param commentId Comment ID * @param data Comment update data */ async updateIssueComment(owner, repo, commentId, data) { return this.request('patch', `/repos/${owner}/${repo}/issues/comments/${commentId}`, data); } /** * Delete an issue comment * @param owner Repository owner (user or organization) * @param repo Repository name * @param commentId Comment ID */ async deleteIssueComment(owner, repo, commentId) { return this.request('delete', `/repos/${owner}/${repo}/issues/comments/${commentId}`); } // Commits and events endpoints /** * List commits * @param owner Repository owner (user or organization) * @param repo Repository name * @param params Query parameters */ async getCommits(owner, repo, params) { return this.request('get', `/repos/${owner}/${repo}/commits`, undefined, params); } /** * Get a commit * @param owner Repository owner (user or organization) * @param repo Repository name * @param sha Commit SHA */ async getCommit(owner, repo, sha) { return this.request('get', `/repos/${owner}/${repo}/commits/${sha}`); } /** * Compare two commits * @param owner Repository owner (user or organization) * @param repo Repository name * @param base Base commit * @param head Head commit */ async compareCommits(owner, repo, base, head) { return this.request('get', `/repos/${owner}/${repo}/compare/${base}...${head}`); } // Releases endpoints /** * List releases * @param owner Repository owner (user or organization) * @param repo Repository name * @param params Pagination parameters */ async getReleases(owner, repo, params) { return this.request('get', `/repos/${owner}/${repo}/releases`, undefined, params); } /** * Get a release * @param owner Repository owner (user or organization) * @param repo Repository name * @param releaseId Release ID */ async getRelease(owner, repo, releaseId) { return this.request('get', `/repos/${owner}/${repo}/releases/${releaseId}`); } /** * Create a release * @param owner Repository owner (user or organization) * @param repo Repository name * @param data Release data */ async createRelease(owner, repo, data) { return this.request('post', `/repos/${owner}/${repo}/releases`, data); } // Helper methods for common tasks /** * Clone a repository (fork it under your account) * @param owner Repository owner (user or organization) * @param repo Repository name * @param options Fork options */ async forkRepo(owner, repo, options) { return this.request('post', `/repos/${owner}/${repo}/forks`, options); } /** * Get the latest release for a repository * @param owner Repository owner (user or organization) * @param repo Repository name */ async getLatestRelease(owner, repo) { return this.request('get', `/repos/${owner}/${repo}/releases/latest`); } /** * Get the readme file for a repository * @param owner Repository owner (user or organization) * @param repo Repository name * @param ref Git reference (branch, tag, or commit SHA) */ async getReadme(owner, repo, ref) { return this.request('get', `/repos/${owner}/${repo}/readme`, undefined, { ref }); } /** * Search repositories * @param query Search query * @param params Search parameters */ async searchRepositories(query, params) { return this.request('get', '/search/repositories', undefined, { q: query, ...params }); } /** * Search code * @param query Search query * @param params Search parameters */ async searchCode(query, params) { return this.request('get', '/search/code', undefined, { q: query, ...params }); } /** * Search issues and pull requests * @param query Search query * @param params Search parameters */ async searchIssues(query, params) { return this.request('get', '/search/issues', undefined, { q: query, ...params }); } } exports.GitHubAPI = GitHubAPI;