From ee578b43e02907c4c896869c9c797f285b969ac2 Mon Sep 17 00:00:00 2001 From: Alexandr Date: Sat, 11 Oct 2025 20:47:09 +0300 Subject: [PATCH] fix: resolve vscode type errors in API endpoints files --- api/gist.js | 20 ++++++++++++++++++-- api/index.js | 20 ++++++++++++++++++-- api/pin.js | 20 ++++++++++++++++++-- api/top-langs.js | 20 ++++++++++++++++++-- api/wakatime.js | 20 ++++++++++++++++++-- src/common/error.js | 15 +++++++++++++++ 6 files changed, 105 insertions(+), 10 deletions(-) diff --git a/api/gist.js b/api/gist.js index d6713eafcef43..02d43d079d510 100644 --- a/api/gist.js +++ b/api/gist.js @@ -11,7 +11,9 @@ import { setErrorCacheHeaders, } from "../src/common/cache.js"; import { guardAccess } from "../src/common/access.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; +// @ts-ignore export default async (req, res) => { const { id, @@ -89,10 +91,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/index.js b/api/index.js index d5e55fbbfcd60..c8c5de63bc703 100644 --- a/api/index.js +++ b/api/index.js @@ -8,10 +8,12 @@ import { setCacheHeaders, setErrorCacheHeaders, } from "../src/common/cache.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; import { parseArray, parseBoolean, renderError } from "../src/common/utils.js"; import { fetchStats } from "../src/fetchers/stats.js"; import { isLocaleAvailable } from "../src/translations.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -127,10 +129,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/pin.js b/api/pin.js index e1f46b32c34b9..c8fa592468fcd 100644 --- a/api/pin.js +++ b/api/pin.js @@ -8,10 +8,12 @@ import { setCacheHeaders, setErrorCacheHeaders, } from "../src/common/cache.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; import { parseBoolean, renderError } from "../src/common/utils.js"; import { fetchRepo } from "../src/fetchers/repo.js"; import { isLocaleAvailable } from "../src/translations.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -92,10 +94,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/top-langs.js b/api/top-langs.js index df286b483d929..47c3c29d3713b 100644 --- a/api/top-langs.js +++ b/api/top-langs.js @@ -8,10 +8,12 @@ import { setCacheHeaders, setErrorCacheHeaders, } from "../src/common/cache.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; import { parseArray, parseBoolean, renderError } from "../src/common/utils.js"; import { fetchTopLanguages } from "../src/fetchers/top-languages.js"; import { isLocaleAvailable } from "../src/translations.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -150,10 +152,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/api/wakatime.js b/api/wakatime.js index b8642649be219..9cb995e2bbcbb 100644 --- a/api/wakatime.js +++ b/api/wakatime.js @@ -11,7 +11,9 @@ import { setErrorCacheHeaders, } from "../src/common/cache.js"; import { guardAccess } from "../src/common/access.js"; +import { retrieveSecondaryMessage } from "../src/common/error.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -108,10 +110,24 @@ export default async (req, res) => { ); } catch (err) { setErrorCacheHeaders(res); + if (err instanceof Error) { + return res.send( + renderError({ + message: err.message, + secondaryMessage: retrieveSecondaryMessage(err), + renderOptions: { + title_color, + text_color, + bg_color, + border_color, + theme, + }, + }), + ); + } return res.send( renderError({ - message: err.message, - secondaryMessage: err.secondaryMessage, + message: "An unknown error occurred", renderOptions: { title_color, text_color, diff --git a/src/common/error.js b/src/common/error.js index c76a198d75d6a..d3547bab4df45 100644 --- a/src/common/error.js +++ b/src/common/error.js @@ -1,3 +1,5 @@ +// @ts-check + /** * @type {string} A general message to ask user to try again later. */ @@ -61,9 +63,22 @@ class MissingParamError extends Error { } } +/** + * Retrieve secondary message from an error object. + * + * @param {Error} err The error object. + * @returns {string|undefined} The secondary message if available, otherwise undefined. + */ +const retrieveSecondaryMessage = (err) => { + return "secondaryMessage" in err && typeof err.secondaryMessage === "string" + ? err.secondaryMessage + : undefined; +}; + export { CustomError, MissingParamError, SECONDARY_ERROR_MESSAGES, TRY_AGAIN_LATER, + retrieveSecondaryMessage, };