UNPKG

octo-connect

Version:

This is a simple Node.js application that interacts with the GitHub API to fetch user data.

103 lines (84 loc) 3.22 kB
class gitDetails { constructor(userName, token = null) { this.userName = userName; this.token = token; } // Helper to make authorized fetch requests async _fetch(url) { const headers = this.token ? { Authorization: `token ${this.token}` } : {}; const response = await fetch(url, { headers }); if (response.status === 403) { const errorData = await response.json(); throw new Error( `Rate limit exceeded or access denied: ${errorData.message}` ); } if (!response.ok) { const errorData = await response.json(); throw new Error(`Error: ${errorData.message || response.statusText}`); } return await response.json(); } async getUser() { return await this._fetch(`https://api.github.com/users/${this.userName}`); } async getUserByLocation(locationName, page = 1, per_page = 30) { const url = `https://api.github.com/search/users?q=location:${encodeURIComponent( locationName )}&page=${page}&per_page=${per_page}`; const data = await this._fetch(url); return data.items; } async getUserActivity(page = 1, per_page = 30) { const url = `https://api.github.com/users/${this.userName}/events/public?page=${page}&per_page=${per_page}`; return await this._fetch(url); } async getReposByLanguage(language, page = 1, per_page = 30) { const url = `https://api.github.com/search/repositories?q=language:${encodeURIComponent( language )}&sort=stars&order=desc&page=${page}&per_page=${per_page}`; const data = await this._fetch(url); return data.items; } async getRepos(page = 1, per_page = 30) { return await this._fetch( `https://api.github.com/users/${this.userName}/repos?page=${page}&per_page=${per_page}` ); } async getFollowers(page = 1, per_page = 30) { return await this._fetch( `https://api.github.com/users/${this.userName}/followers?page=${page}&per_page=${per_page}` ); } async getFollowing(page = 1, per_page = 30) { return await this._fetch( `https://api.github.com/users/${this.userName}/following?page=${page}&per_page=${per_page}` ); } async repoDetails(repoName) { return await this._fetch( `https://api.github.com/repos/${this.userName}/${repoName}` ); } async getRepoReadme(repoName) { return await this._fetch( `https://api.github.com/repos/${this.userName}/${repoName}/readme` ); } async getRepoIssues(repoName, page = 1, per_page = 30) { return await this._fetch( `https://api.github.com/repos/${this.userName}/${repoName}/issues?page=${page}&per_page=${per_page}` ); } async getRepoContributors(repoName, page = 1, per_page = 30) { return await this._fetch( `https://api.github.com/repos/${this.userName}/${repoName}/contributors?page=${page}&per_page=${per_page}` ); } async getRepoBranches(repoName, page = 1, per_page = 30) { return await this._fetch( `https://api.github.com/repos/${this.userName}/${repoName}/branches?page=${page}&per_page=${per_page}` ); } } module.exports = { gitDetails };