diff --git a/backend/api-renamed/gist.js b/backend/api-renamed/gist.js index 19a6c1b8..be343d28 100644 --- a/backend/api-renamed/gist.js +++ b/backend/api-renamed/gist.js @@ -12,7 +12,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, @@ -91,10 +93,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/backend/api-renamed/pin.js b/backend/api-renamed/pin.js index a71fe43f..86e53201 100644 --- a/backend/api-renamed/pin.js +++ b/backend/api-renamed/pin.js @@ -8,11 +8,13 @@ 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 { fetchRepo } from "../src/fetchers/repo.js"; import { isLocaleAvailable } from "../src/translations.js"; import { storeRequest } from "../src/common/database.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -138,10 +140,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/backend/api-renamed/top-langs.js b/backend/api-renamed/top-langs.js index 77158435..1ca52d21 100644 --- a/backend/api-renamed/top-langs.js +++ b/backend/api-renamed/top-langs.js @@ -8,11 +8,13 @@ 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"; import { storeRequest } from "../src/common/database.js"; +// @ts-ignore export default async (req, res) => { const { username, @@ -154,10 +156,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/backend/api-renamed/wakatime.js b/backend/api-renamed/wakatime.js index 28bbab6b..1dfd5ebe 100644 --- a/backend/api-renamed/wakatime.js +++ b/backend/api-renamed/wakatime.js @@ -12,7 +12,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, @@ -110,10 +112,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/backend/src/common/error.js b/backend/src/common/error.js index 2035fb20..3f8a1104 100644 --- a/backend/src/common/error.js +++ b/backend/src/common/error.js @@ -1,3 +1,5 @@ +// @ts-check + import { OWNER_AFFILIATIONS } from "./utils.js"; /** @@ -67,9 +69,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, };