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
JavaScript
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 };