@grnsft/if-github-plugin
Version:
Github plugin for Impact Framework.
95 lines • 11.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GithubAPI = void 0;
const dotenv = require("dotenv");
const axios_1 = require("axios");
const utils_1 = require("@grnsft/if-core/utils");
const { AuthorizationError, APIRequestError } = utils_1.ERRORS;
dotenv.config();
const GithubAPI = () => {
const token = process.env.GITHUB_TOKEN;
const githubAPI = axios_1.default.create({
baseURL: 'https://api.github.com/',
headers: {
Authorization: `token ${token}`,
},
});
githubAPI?.interceptors?.response?.use(response => response.data, error => {
if (error.response) {
throw new APIRequestError(`Error fetching data from GitHub API. Status: ${error.response.status}, Message: ${error.response.statusText}`);
}
else if (error.request) {
throw new APIRequestError(`No response received from GitHub API. ${error.message}`);
}
else {
throw new APIRequestError(`Request error: ${error.message}`);
}
});
/**
* Gets sizes and clones of the specified owner's repo.
*/
const getRepoClonesAndSizes = async (owner, repo) => {
if (!token) {
throw new AuthorizationError('Token does not persist in the environment variables.');
}
await checkTokenValidity(token);
await checkOwnerValidity(owner);
const clones = await getRepoClones(owner, repo);
const size = await getRepoSizeInGB(owner, repo);
return {
clones,
size,
};
};
/**
* Checks if the given `token` is valid.
*/
const checkTokenValidity = async (token) => {
try {
return await githubAPI.get('user');
}
catch (error) {
throw new AuthorizationError(`Provided token: ${token} is invalid. ${error}`);
}
};
/**
* Checks if the given `owner` is valid.
*/
const checkOwnerValidity = async (owner) => {
try {
return await githubAPI.get(`orgs/${owner}`);
}
catch (error) {
throw new APIRequestError(`Error fetching owner: ${owner} from GitHub API. ${error}`);
}
};
/**
* Gets specified repo clones.
*/
const getRepoClones = async (owner, repo) => {
try {
const result = await githubAPI.get(`repos/${owner}/${repo}/traffic/clones`);
return result?.clones;
}
catch (error) {
throw new APIRequestError(`Error fetching clones from GitHub API for owner: ${owner} and repo: ${repo}. ${error}`);
}
};
/**
* Gets specified repo data and retrives the `size` property which is in `kilobytes`, and converts it to `GB`.
*/
const getRepoSizeInGB = async (owner, repo) => {
try {
const result = await githubAPI.get(`repos/${owner}/${repo}`);
return result?.size / (1000 * 1000);
}
catch (error) {
throw new APIRequestError(`Error fetching size from GitHub API for owner: ${owner} and repo: ${repo}. ${error}`);
}
};
return {
getRepoClonesAndSizes,
};
};
exports.GithubAPI = GithubAPI;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBQ2pDLGlDQUEwQjtBQUUxQixpREFBNkM7QUFJN0MsTUFBTSxFQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBQyxHQUFHLGNBQU0sQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFVCxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFDNUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsTUFBTSxTQUFTLEdBQUcsZUFBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QixPQUFPLEVBQUUseUJBQXlCO1FBQ2xDLE9BQU8sRUFBRTtZQUNQLGFBQWEsRUFBRSxTQUFTLEtBQUssRUFBRTtTQUNoQztLQUNGLENBQUMsQ0FBQztJQUVILFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FDcEMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUN6QixLQUFLLENBQUMsRUFBRTtRQUNOLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLGdEQUFnRCxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sY0FBYyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUMvRyxDQUFDO1FBQ0osQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLHlDQUF5QyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQ3pELENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxlQUFlLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDLENBQ0YsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxFQUFFO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsc0RBQXNELENBQ3ZELENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxNQUFNLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhDLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFaEQsT0FBTztZQUNMLE1BQU07WUFDTixJQUFJO1NBQ0wsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsS0FBYSxFQUFFLEVBQUU7UUFDakQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksa0JBQWtCLENBQzFCLG1CQUFtQixLQUFLLGdCQUFnQixLQUFLLEVBQUUsQ0FDaEQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxFQUFFLEtBQWEsRUFBRSxFQUFFO1FBQ2pELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxlQUFlLENBQ3ZCLHlCQUF5QixLQUFLLHFCQUFxQixLQUFLLEVBQUUsQ0FDM0QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxLQUFhLEVBQUUsSUFBWSxFQUFFLEVBQUU7UUFDMUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUNoQyxTQUFTLEtBQUssSUFBSSxJQUFJLGlCQUFpQixDQUN4QyxDQUFDO1lBRUYsT0FBTyxNQUFNLEVBQUUsTUFBTSxDQUFDO1FBQ3hCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLGVBQWUsQ0FDdkIsb0RBQW9ELEtBQUssY0FBYyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQ3hGLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsS0FBYSxFQUFFLElBQVksRUFBRSxFQUFFO1FBQzVELElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FDaEMsU0FBUyxLQUFLLElBQUksSUFBSSxFQUFFLENBQ3pCLENBQUM7WUFDRixPQUFPLE1BQU0sRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksZUFBZSxDQUN2QixrREFBa0QsS0FBSyxjQUFjLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FDdEYsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wscUJBQXFCO0tBQ3RCLENBQUM7QUFDSixDQUFDLENBQUM7QUE5R1csUUFBQSxTQUFTLGFBOEdwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGRvdGVudiBmcm9tICdkb3RlbnYnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcblxuaW1wb3J0IHtFUlJPUlN9IGZyb20gJ0Bncm5zZnQvaWYtY29yZS91dGlscyc7XG5cbmltcG9ydCB7Q2xvbmVzUmVzcG9uc2UsIFNpemVSZXNwb25zZX0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IHtBdXRob3JpemF0aW9uRXJyb3IsIEFQSVJlcXVlc3RFcnJvcn0gPSBFUlJPUlM7XG5cbmRvdGVudi5jb25maWcoKTtcblxuZXhwb3J0IGNvbnN0IEdpdGh1YkFQSSA9ICgpID0+IHtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gIGNvbnN0IGdpdGh1YkFQSSA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgYmFzZVVSTDogJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgIH0sXG4gIH0pO1xuXG4gIGdpdGh1YkFQST8uaW50ZXJjZXB0b3JzPy5yZXNwb25zZT8udXNlKFxuICAgIHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEsXG4gICAgZXJyb3IgPT4ge1xuICAgICAgaWYgKGVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IG5ldyBBUElSZXF1ZXN0RXJyb3IoXG4gICAgICAgICAgYEVycm9yIGZldGNoaW5nIGRhdGEgZnJvbSBHaXRIdWIgQVBJLiBTdGF0dXM6ICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzfSwgTWVzc2FnZTogJHtlcnJvci5yZXNwb25zZS5zdGF0dXNUZXh0fWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xuICAgICAgICB0aHJvdyBuZXcgQVBJUmVxdWVzdEVycm9yKFxuICAgICAgICAgIGBObyByZXNwb25zZSByZWNlaXZlZCBmcm9tIEdpdEh1YiBBUEkuICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgQVBJUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBHZXRzIHNpemVzIGFuZCBjbG9uZXMgb2YgdGhlIHNwZWNpZmllZCBvd25lcidzIHJlcG8uXG4gICAqL1xuICBjb25zdCBnZXRSZXBvQ2xvbmVzQW5kU2l6ZXMgPSBhc3luYyAob3duZXI6IHN0cmluZywgcmVwbzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEF1dGhvcml6YXRpb25FcnJvcihcbiAgICAgICAgJ1Rva2VuIGRvZXMgbm90IHBlcnNpc3QgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGF3YWl0IGNoZWNrVG9rZW5WYWxpZGl0eSh0b2tlbik7XG4gICAgYXdhaXQgY2hlY2tPd25lclZhbGlkaXR5KG93bmVyKTtcblxuICAgIGNvbnN0IGNsb25lcyA9IGF3YWl0IGdldFJlcG9DbG9uZXMob3duZXIsIHJlcG8pO1xuICAgIGNvbnN0IHNpemUgPSBhd2FpdCBnZXRSZXBvU2l6ZUluR0Iob3duZXIsIHJlcG8pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb25lcyxcbiAgICAgIHNpemUsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBgdG9rZW5gIGlzIHZhbGlkLlxuICAgKi9cbiAgY29uc3QgY2hlY2tUb2tlblZhbGlkaXR5ID0gYXN5bmMgKHRva2VuOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGdpdGh1YkFQSS5nZXQoJ3VzZXInKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEF1dGhvcml6YXRpb25FcnJvcihcbiAgICAgICAgYFByb3ZpZGVkIHRva2VuOiAke3Rva2VufSBpcyBpbnZhbGlkLiAke2Vycm9yfWBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdpdmVuIGBvd25lcmAgaXMgdmFsaWQuXG4gICAqL1xuICBjb25zdCBjaGVja093bmVyVmFsaWRpdHkgPSBhc3luYyAob3duZXI6IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZ2l0aHViQVBJLmdldChgb3Jncy8ke293bmVyfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJUmVxdWVzdEVycm9yKFxuICAgICAgICBgRXJyb3IgZmV0Y2hpbmcgb3duZXI6ICR7b3duZXJ9IGZyb20gR2l0SHViIEFQSS4gJHtlcnJvcn1gXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogR2V0cyBzcGVjaWZpZWQgcmVwbyBjbG9uZXMuXG4gICAqL1xuICBjb25zdCBnZXRSZXBvQ2xvbmVzID0gYXN5bmMgKG93bmVyOiBzdHJpbmcsIHJlcG86IHN0cmluZykgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnaXRodWJBUEkuZ2V0PENsb25lc1Jlc3BvbnNlLCBhbnk+KFxuICAgICAgICBgcmVwb3MvJHtvd25lcn0vJHtyZXBvfS90cmFmZmljL2Nsb25lc2BcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ/LmNsb25lcztcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEFQSVJlcXVlc3RFcnJvcihcbiAgICAgICAgYEVycm9yIGZldGNoaW5nIGNsb25lcyBmcm9tIEdpdEh1YiBBUEkgZm9yIG93bmVyOiAke293bmVyfSBhbmQgcmVwbzogJHtyZXBvfS4gJHtlcnJvcn1gXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogR2V0cyBzcGVjaWZpZWQgcmVwbyBkYXRhIGFuZCByZXRyaXZlcyB0aGUgYHNpemVgIHByb3BlcnR5IHdoaWNoIGlzIGluIGBraWxvYnl0ZXNgLCBhbmQgY29udmVydHMgaXQgdG8gYEdCYC5cbiAgICovXG4gIGNvbnN0IGdldFJlcG9TaXplSW5HQiA9IGFzeW5jIChvd25lcjogc3RyaW5nLCByZXBvOiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2l0aHViQVBJLmdldDxTaXplUmVzcG9uc2UsIGFueT4oXG4gICAgICAgIGByZXBvcy8ke293bmVyfS8ke3JlcG99YFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXN1bHQ/LnNpemUgLyAoMTAwMCAqIDEwMDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJUmVxdWVzdEVycm9yKFxuICAgICAgICBgRXJyb3IgZmV0Y2hpbmcgc2l6ZSBmcm9tIEdpdEh1YiBBUEkgZm9yIG93bmVyOiAke293bmVyfSBhbmQgcmVwbzogJHtyZXBvfS4gJHtlcnJvcn1gXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGdldFJlcG9DbG9uZXNBbmRTaXplcyxcbiAgfTtcbn07XG4iXX0=