From 2df35521d7f54fb26bffb9278f45184f78884ef4 Mon Sep 17 00:00:00 2001 From: Alexandr Garbuzov <186095128+alexandr-garbuzov@users.noreply.github.com> Date: Wed, 15 Oct 2025 20:09:34 +0300 Subject: [PATCH] refactor: move HTTP related code into separate module (#4578) * refactor: move HTTP related code into separate module * dev --------- Co-authored-by: Alexandr --- api/status/pat-info.js | 6 +++++- api/status/up.js | 5 ++++- src/common/http.js | 24 ++++++++++++++++++++++++ src/common/index.js | 1 - src/common/utils.js | 23 ----------------------- src/fetchers/gist.js | 2 +- src/fetchers/repo.js | 2 +- src/fetchers/stats.js | 3 ++- src/fetchers/top-languages.js | 3 ++- 9 files changed, 39 insertions(+), 30 deletions(-) create mode 100644 src/common/http.js diff --git a/api/status/pat-info.js b/api/status/pat-info.js index 1f17bf65..087abd48 100644 --- a/api/status/pat-info.js +++ b/api/status/pat-info.js @@ -1,3 +1,5 @@ +// @ts-check + /** * @file Contains a simple cloud function that can be used to check which PATs are no * longer working. It returns a list of valid PATs, expired PATs and PATs with errors. @@ -5,7 +7,9 @@ * @description This function is currently rate limited to 1 request per 5 minutes. */ -import { logger, request, dateDiff } from "../../src/common/utils.js"; +import { request } from "../../src/common/http.js"; +import { logger, dateDiff } from "../../src/common/utils.js"; + export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 5 minutes /** diff --git a/api/status/up.js b/api/status/up.js index 6ed7c37c..042da140 100644 --- a/api/status/up.js +++ b/api/status/up.js @@ -1,3 +1,5 @@ +// @ts-check + /** * @file Contains a simple cloud function that can be used to check if the PATs are still * functional. @@ -5,8 +7,9 @@ * @description This function is currently rate limited to 1 request per 5 minutes. */ +import { request } from "../../src/common/http.js"; import retryer from "../../src/common/retryer.js"; -import { logger, request } from "../../src/common/utils.js"; +import { logger } from "../../src/common/utils.js"; export const RATE_LIMIT_SECONDS = 60 * 5; // 1 request per 5 minutes diff --git a/src/common/http.js b/src/common/http.js new file mode 100644 index 00000000..0f3270fe --- /dev/null +++ b/src/common/http.js @@ -0,0 +1,24 @@ +import axios from "axios"; + +/** + * @typedef {import('axios').AxiosRequestConfig['data']} AxiosRequestConfigData Axios request data. + * @typedef {import('axios').AxiosRequestConfig['headers']} AxiosRequestConfigHeaders Axios request headers. + */ + +/** + * Send GraphQL request to GitHub API. + * + * @param {AxiosRequestConfigData} data Request data. + * @param {AxiosRequestConfigHeaders} headers Request headers. + * @returns {Promise} Request response. + */ +const request = (data, headers) => { + return axios({ + url: "https://api.github.com/graphql", + method: "post", + headers, + data, + }); +}; + +export { request }; diff --git a/src/common/index.js b/src/common/index.js index 3a61fead..22330a45 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -13,7 +13,6 @@ export { parseBoolean, parseArray, clampValue, - request, flexLayout, logger, measureText, diff --git a/src/common/utils.js b/src/common/utils.js index 6ce2741c..39a859de 100644 --- a/src/common/utils.js +++ b/src/common/utils.js @@ -1,6 +1,5 @@ // @ts-check -import axios from "axios"; import toEmoji from "emoji-name-map"; import { SECONDARY_ERROR_MESSAGES, TRY_AGAIN_LATER } from "./error.js"; import { getCardColors } from "./color.js"; @@ -125,27 +124,6 @@ const clampValue = (number, min, max) => { return Math.max(min, Math.min(number, max)); }; -/** - * @typedef {import('axios').AxiosRequestConfig['data']} AxiosRequestConfigData Axios request data. - * @typedef {import('axios').AxiosRequestConfig['headers']} AxiosRequestConfigHeaders Axios request headers. - */ - -/** - * Send GraphQL request to GitHub API. - * - * @param {AxiosRequestConfigData} data Request data. - * @param {AxiosRequestConfigHeaders} headers Request headers. - * @returns {Promise} Request response. - */ -const request = (data, headers) => { - return axios({ - url: "https://api.github.com/graphql", - method: "post", - headers, - data, - }); -}; - // Script parameters. const ERROR_CARD_LENGTH = 576.5; @@ -350,7 +328,6 @@ export { parseBoolean, parseArray, clampValue, - request, flexLayout, logger, measureText, diff --git a/src/fetchers/gist.js b/src/fetchers/gist.js index ce96c2b1..635892cf 100644 --- a/src/fetchers/gist.js +++ b/src/fetchers/gist.js @@ -1,8 +1,8 @@ // @ts-check -import { request } from "../common/utils.js"; import { retryer } from "../common/retryer.js"; import { MissingParamError } from "../common/error.js"; +import { request } from "../common/http.js"; /** * @typedef {import('axios').AxiosRequestHeaders} AxiosRequestHeaders Axios request headers. diff --git a/src/fetchers/repo.js b/src/fetchers/repo.js index 3cad9c00..aa9bc7c1 100644 --- a/src/fetchers/repo.js +++ b/src/fetchers/repo.js @@ -1,8 +1,8 @@ // @ts-check import { MissingParamError } from "../common/error.js"; +import { request } from "../common/http.js"; import { retryer } from "../common/retryer.js"; -import { request } from "../common/utils.js"; /** * @typedef {import('axios').AxiosRequestHeaders} AxiosRequestHeaders Axios request headers. diff --git a/src/fetchers/stats.js b/src/fetchers/stats.js index 37ce591f..34e558de 100644 --- a/src/fetchers/stats.js +++ b/src/fetchers/stats.js @@ -5,10 +5,11 @@ import * as dotenv from "dotenv"; import githubUsernameRegex from "github-username-regex"; import { calculateRank } from "../calculateRank.js"; import { retryer } from "../common/retryer.js"; -import { logger, request } from "../common/utils.js"; +import { logger } from "../common/utils.js"; import { excludeRepositories } from "../common/envs.js"; import { CustomError, MissingParamError } from "../common/error.js"; import { wrapTextMultiline } from "../common/fmt.js"; +import { request } from "../common/http.js"; dotenv.config(); diff --git a/src/fetchers/top-languages.js b/src/fetchers/top-languages.js index 9e711b0d..c0f353eb 100644 --- a/src/fetchers/top-languages.js +++ b/src/fetchers/top-languages.js @@ -1,10 +1,11 @@ // @ts-check import { retryer } from "../common/retryer.js"; -import { logger, request } from "../common/utils.js"; +import { logger } from "../common/utils.js"; import { excludeRepositories } from "../common/envs.js"; import { CustomError, MissingParamError } from "../common/error.js"; import { wrapTextMultiline } from "../common/fmt.js"; +import { request } from "../common/http.js"; /** * @typedef {import("axios").AxiosRequestHeaders} AxiosRequestHeaders Axios request headers.