From 8734fac30a251fcacc55263b1286c823e5d13c96 Mon Sep 17 00:00:00 2001 From: martin-mfg <2026226+martin-mfg@users.noreply.github.com> Date: Sat, 11 Oct 2025 13:56:02 +0200 Subject: [PATCH] add wkatime proxy --- .../output/functions/api.func/router.js | 4 ++++ backend/api-renamed/wakatime-proxy.js | 18 ++++++++++++++++++ frontend/frontend/craco.config.js | 1 + frontend/frontend/src/wakatime-override.js | 15 +++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 backend/api-renamed/wakatime-proxy.js create mode 100644 frontend/frontend/src/wakatime-override.js diff --git a/backend/_dot_vercel_copy/output/functions/api.func/router.js b/backend/_dot_vercel_copy/output/functions/api.func/router.js index cfad4254..8c9c43dd 100644 --- a/backend/_dot_vercel_copy/output/functions/api.func/router.js +++ b/backend/_dot_vercel_copy/output/functions/api.func/router.js @@ -3,6 +3,7 @@ import { default as gist } from "./api-renamed/gist.js"; import { default as pin } from "./api-renamed/pin.js"; import { default as topLangs } from "./api-renamed/top-langs.js"; import { default as wakatime } from "./api-renamed/wakatime.js"; +import { default as wakatimeProxy } from "./api-renamed/wakatime-proxy.js"; import { default as repeatRecent } from "./api-renamed/repeat-recent.js"; import { default as patInfo } from "./api-renamed/status/pat-info.js"; import { default as statusUp } from "./api-renamed/status/up.js"; @@ -42,6 +43,9 @@ export default async (req, res) => { case "/api/wakatime": await wakatime(req, res); break; + case "/api/wakatime-proxy": + await wakatimeProxy(req, res); + break; case "/api/repeat-recent": await repeatRecent(req, res); break; diff --git a/backend/api-renamed/wakatime-proxy.js b/backend/api-renamed/wakatime-proxy.js new file mode 100644 index 00000000..45be7b65 --- /dev/null +++ b/backend/api-renamed/wakatime-proxy.js @@ -0,0 +1,18 @@ +import { fetchWakatimeStats } from "../src/fetchers/wakatime.js"; +import { logger } from "../src/common/utils.js"; + +/** + * @param {any} req The request. + * @param {any} res The response. + */ +export default async (req, res) => { + const { username } = req.query; + res.setHeader("Content-Type", "application/json"); + try { + const stats = await fetchWakatimeStats({ username }); + res.send(stats); + } catch (err) { + logger.error(err); + res.send("Something went wrong: " + err.message); + } +}; diff --git a/frontend/frontend/craco.config.js b/frontend/frontend/craco.config.js index 4568e76e..997197f1 100644 --- a/frontend/frontend/craco.config.js +++ b/frontend/frontend/craco.config.js @@ -5,6 +5,7 @@ module.exports = { webpack: { alias: { dotenv: path.resolve(__dirname, 'src/dotenv-browser-stub.js'), + '../src/fetchers/wakatime.js': path.resolve(__dirname, 'src/wakatime-override.js'), }, configure: (webpackConfig) => { diff --git a/frontend/frontend/src/wakatime-override.js b/frontend/frontend/src/wakatime-override.js new file mode 100644 index 00000000..732842fc --- /dev/null +++ b/frontend/frontend/src/wakatime-override.js @@ -0,0 +1,15 @@ +import axios from 'axios'; +import { HOST } from './constants'; + +const fetchWakatimeStats = async ({ username, api_domain }) => { + if (!username) { + throw new Error('missing parameter: username'); + } + + const { data } = await axios.get(`https://${HOST}/api/wakatime-proxy?username=${username}`); + + return data.data; +}; + +export { fetchWakatimeStats }; +export default fetchWakatimeStats;