1
0
Fork 0
taevas.xyz/backend/api/infos/website/umami.ts
Taevas d781f7138f
Make backend/frontend distinction clearer
Helps with eventually adding other pages
Also makes it clear it's the backend that decides what data to send to the frontend
2025-07-08 14:40:35 +02:00

30 linhas
1,1 KiB
TypeScript

import { headers, parseJson, type Handler } from "../..";
import { tokens } from "../../../database.ts";
// From https://github.com/umami-software/api-client/blob/master/src/types.ts
export type Info = {
pageviews: { value: number; prev: number };
visitors: { value: number; prev: number };
visits: { value: number; prev: number };
bounces: { value: number; prev: number };
totaltime: { value: number; prev: number };
} | undefined;
export const umami: Handler = async () => {
const token = await tokens.get("umami");
const api_server = "https://visitors.taevas.xyz/api";
const website_id = "f196d626-e609-4841-9a80-0dc60f523ed5";
const now = new Date();
const sevendaysago = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
// Not using the package directly because of serious issues I consider it to have
const umami = await parseJson(await fetch(`${api_server}/websites/${website_id}/stats?startAt=${Number(sevendaysago)}&endAt=${Number(now)}`, {
headers: {
...headers,
"Authorization": `Bearer ${token?.access_token}`
},
})) as Info;
return Response.json(umami, {status: 200});
};