diff --git a/src/common/retryer.js b/src/common/retryer.js index 49d506d31531a..2a441f15a0dd0 100644 --- a/src/common/retryer.js +++ b/src/common/retryer.js @@ -1,10 +1,12 @@ import { CustomError, logger } from "./utils.js"; // Script variables. + +// Count the number of GitHub API tokens available. const PATs = Object.keys(process.env).filter((key) => /PAT_\d*$/.exec(key), ).length; -const RETRIES = PATs ? PATs : 7; +const RETRIES = process.env.NODE_ENV === "test" ? 7 : PATs; /** * @typedef {import("axios").AxiosResponse} AxiosResponse Axios response. @@ -20,6 +22,9 @@ const RETRIES = PATs ? PATs : 7; * @returns {Promise} The response from the fetcher function. */ const retryer = async (fetcher, variables, retries = 0) => { + if (!RETRIES) { + throw new CustomError("No GitHub API tokens found", CustomError.NO_TOKENS); + } if (retries > RETRIES) { throw new CustomError("Maximum retries exceeded", CustomError.MAX_RETRY); } diff --git a/src/common/utils.js b/src/common/utils.js index 4b5dced487453..d1dde3b8221af 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -318,8 +318,9 @@ const CONSTANTS = { }; const SECONDARY_ERROR_MESSAGES = { - MAX_RETRY: - "Please add an env variable called PAT_1 with your github token in vercel", + MAX_RETRY: "Downtime due to GitHub API rate limiting", + NO_TOKENS: + "Please add an env variable called PAT_1 with your GitHub API token in vercel", USER_NOT_FOUND: "Make sure the provided username is not an organization", GRAPHQL_ERROR: "Please try again later", WAKATIME_USER_NOT_FOUND: "Make sure you have a public WakaTime profile", @@ -340,6 +341,7 @@ class CustomError extends Error { } static MAX_RETRY = "MAX_RETRY"; + static NO_TOKENS = "NO_TOKENS"; static USER_NOT_FOUND = "USER_NOT_FOUND"; static GRAPHQL_ERROR = "GRAPHQL_ERROR"; static WAKATIME_ERROR = "WAKATIME_ERROR";