mirror of
https://github.com/RhenCloud/Cloud-Home.git
synced 2026-01-22 17:39:07 +08:00
57 lines
1.9 KiB
TypeScript
57 lines
1.9 KiB
TypeScript
import { defineEventHandler, getQuery, createError } from "h3";
|
|
import { useRuntimeConfig } from "#imports";
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const res = event.node.res;
|
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
res.setHeader("Access-Control-Allow-Methods", "GET, OPTIONS");
|
|
res.setHeader("Access-Control-Allow-Headers", "Content-Type");
|
|
|
|
if (event.node.req.method === "OPTIONS") {
|
|
res.statusCode = 200;
|
|
return "ok";
|
|
}
|
|
|
|
if (event.node.req.method !== "GET") {
|
|
throw createError({ statusCode: 405, statusMessage: "Method Not Allowed" });
|
|
}
|
|
|
|
const config = useRuntimeConfig();
|
|
const apiKey = config.wakatimeApiKey;
|
|
if (typeof apiKey !== "string") {
|
|
throw createError({ statusCode: 500, statusMessage: "Invalid WakaTime API Key configuration" });
|
|
}
|
|
|
|
const query = getQuery(event);
|
|
const apiUrl = (query.apiUrl as string) || config.wakatimeApiUrl;
|
|
|
|
const headers = {
|
|
Authorization: `Basic ${Buffer.from(apiKey).toString("base64")}`,
|
|
};
|
|
|
|
try {
|
|
const [weeklyStatsResponse, allTimeStatsResponse, statusResponse] = await Promise.all([
|
|
fetch(`${apiUrl}/users/current/stats/last_7_days`, { headers }),
|
|
fetch(`${apiUrl}/users/current/stats/all_time`, { headers }),
|
|
fetch(`${apiUrl}/users/current/status`, { headers }),
|
|
]);
|
|
|
|
if (!weeklyStatsResponse.ok) {
|
|
throw new Error(`Wakatime API error: ${weeklyStatsResponse.status}`);
|
|
}
|
|
|
|
const weeklyStatsData = await weeklyStatsResponse.json();
|
|
const allTimeStatsData = allTimeStatsResponse.ok ? await allTimeStatsResponse.json() : null;
|
|
const statusData = statusResponse.ok ? await statusResponse.json() : null;
|
|
|
|
return {
|
|
weekly: weeklyStatsData.data,
|
|
allTime: allTimeStatsData ? allTimeStatsData.data : null,
|
|
status: statusData,
|
|
};
|
|
} catch (error) {
|
|
console.error("Wakatime API error:", error);
|
|
throw createError({ statusCode: 500, statusMessage: "Failed to fetch Wakatime data" });
|
|
}
|
|
});
|