diff --git a/api/wakatime.js b/api/wakatime.js index d439c5b7..7ae93b57 100644 --- a/api/wakatime.js +++ b/api/wakatime.js @@ -28,7 +28,6 @@ export default async (req, res) => { langs_count, hide, api_domain, - range, border_radius, border_color, } = req.query; @@ -40,7 +39,7 @@ export default async (req, res) => { } try { - const stats = await fetchWakatimeStats({ username, api_domain, range }); + const stats = await fetchWakatimeStats({ username, api_domain }); let cacheSeconds = clampValue( parseInt(cache_seconds || CONSTANTS.FOUR_HOURS, 10), diff --git a/src/fetchers/wakatime-fetcher.js b/src/fetchers/wakatime-fetcher.js index 3955c906..bbdeaf8b 100644 --- a/src/fetchers/wakatime-fetcher.js +++ b/src/fetchers/wakatime-fetcher.js @@ -5,29 +5,33 @@ import { MissingParamError } from "../common/utils.js"; * WakaTime data fetcher. * * @param {{username: string, api_domain: string}} props Fetcher props. - * @returns {Promise} WakaTime data response. + * @returns {Promise} WakaTime data response. */ const fetchWakatimeStats = async ({ username, api_domain }) => { if (!username) throw new MissingParamError(["username"]); - // Loop through available ranges to get user data. - for (const range of ["all_time", "last_year", "last_7_days"]) { - try { - const { data } = await axios.get( - `https://${ - api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com" - }/api/v1/users/${username}/stats/${range}?is_including_today=true`, - ); + // Retrieve user range. + const { data: userdata } = await axios.get( + `https://${ + api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com" + }/api/v1/users/${username}/stats`, + ); + const range = userdata.data.range; - return data.data; - } catch (err) { - if (err.response.status === 403 && range !== "last_year") { - continue; - } else if (err.response.status < 200 || err.response.status > 299) { - throw new Error(i18n.t("wakatimecard.nouser")); - } - throw err; + // Loop through available ranges to get user data. + try { + const { data } = await axios.get( + `https://${ + api_domain ? api_domain.replace(/\/$/gi, "") : "wakatime.com" + }/api/v1/users/${username}/stats/${range}?is_including_today=true`, + ); + + return data.data; + } catch (err) { + if (err.response.status < 200 || err.response.status > 299) { + throw new Error(i18n.t("wakatimecard.nouser")); } + throw err; } }; diff --git a/tests/fetchWakatime.test.js b/tests/fetchWakatime.test.js index 04c01ba4..683d2bb9 100644 --- a/tests/fetchWakatime.test.js +++ b/tests/fetchWakatime.test.js @@ -8,6 +8,37 @@ afterEach(() => { mock.reset(); }); +const wakaTimeUserData = { + data: { + id: "aa437823-82d1-4b37-9b84-ab4ed89c8688", + user_id: "c7e2e900-858b-400e-bc1c-016345cf59b6", + range: "all_time", + timeout: 15, + writes_only: false, + holidays: 134, + status: "ok", + is_up_to_date: true, + days_minus_holidays: 231, + days_including_holidays: 365, + percent_calculated: 100, + human_readable_total: "691 hrs 5 mins", + is_already_updating: false, + is_stuck: false, + total_seconds_including_other_language: 2508467.924346, + is_up_to_date_pending_future: false, + total_seconds: 2487938.453846, + human_readable_daily_average: "2 hrs 59 mins", + human_readable_total_including_other_language: "696 hrs 47 mins", + daily_average_including_other_language: 10859.0, + daily_average: 10770.0, + human_readable_daily_average_including_other_language: "3 hrs", + username: "rickstaa", + is_including_today: false, + human_readable_range: "last year", + is_coding_activity_visible: true, + is_other_usage_visible: false, + }, +}; const wakaTimeData = { data: { categories: [ @@ -103,6 +134,9 @@ const wakaTimeData = { describe("Wakatime fetcher", () => { it("should fetch correct wakatime data", async () => { const username = "anuraghazra"; + mock + .onGet(`https://wakatime.com/api/v1/users/${username}/stats`) + .reply(200, wakaTimeUserData); mock .onGet( `https://wakatime.com/api/v1/users/${username}/stats/all_time?is_including_today=true`,