forked from mirrored/github-readme-stats
* feat: template option added husky added for same commit disable console in test \ logger utils added env checked for log modified git ignore * changed are done as per the suggesstion * changed style and font * text color dynamic * fix border and using .bagde class as common * simplified the badge svg code through a common method * chore: updated css & fixed tests Co-authored-by: anuraghazra <hazru.anurag@gmail.com>
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
const { logger } = require("./utils");
|
|
|
|
const retryer = async (fetcher, variables, retries = 0) => {
|
|
if (retries > 7) {
|
|
throw new Error("Maximum retries exceeded");
|
|
}
|
|
try {
|
|
logger.log(`Trying PAT_${retries + 1}`);
|
|
|
|
// try to fetch with the first token since RETRIES is 0 index i'm adding +1
|
|
let response = await fetcher(
|
|
variables,
|
|
process.env[`PAT_${retries + 1}`],
|
|
retries
|
|
);
|
|
|
|
// prettier-ignore
|
|
const isRateExceeded = response.data.errors && response.data.errors[0].type === "RATE_LIMITED";
|
|
|
|
// if rate limit is hit increase the RETRIES and recursively call the retryer
|
|
// with username, and current RETRIES
|
|
if (isRateExceeded) {
|
|
logger.log(`PAT_${retries + 1} Failed`);
|
|
retries++;
|
|
// directly return from the function
|
|
return retryer(fetcher, variables, retries);
|
|
}
|
|
|
|
// finally return the response
|
|
return response;
|
|
} catch (err) {
|
|
// prettier-ignore
|
|
// also checking for bad credentials if any tokens gets invalidated
|
|
const isBadCredential = err.response.data && err.response.data.message === "Bad credentials";
|
|
|
|
if (isBadCredential) {
|
|
logger.log(`PAT_${retries + 1} Failed`);
|
|
retries++;
|
|
// directly return from the function
|
|
return retryer(fetcher, variables, retries);
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = retryer;
|