xtablo-source/api/src/tasks.ts
Arthur Belleville 370cd11dad
Format api
2025-10-24 08:39:16 +02:00

50 lines
1.4 KiB
TypeScript

import { S3Client } from "@aws-sdk/client-s3";
import type { SupabaseClient } from "@supabase/supabase-js";
import { Hono } from "hono";
import { config } from "./config.js";
import { writeCalendarFileToR2 } from "./helpers.js";
export const taskRouter = new Hono<{
Variables: { supabase: SupabaseClient };
}>();
taskRouter.post("/sync-calendars", async (c) => {
const supabase = c.get("supabase");
if (c.req.header("Authorization") !== `Basic ${config.SYNC_CALS_SECRET}`) {
return c.json({ error: "Unauthorized" }, 401);
}
const s3 = new S3Client({
region: "auto",
endpoint: `https://${config.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`,
credentials: {
accessKeyId: config.R2_ACCESS_KEY_ID,
secretAccessKey: config.R2_SECRET_ACCESS_KEY,
},
});
const { data, error } = await supabase
.from("calendar_subscriptions")
.select("token, tablo_id, tablos(name)");
if (error) {
return c.json({ error: error.message }, 500);
}
const calendarSubscriptionsData = data as unknown as [
{
token: string;
tablo_id: string;
tablos: { name: string };
},
];
calendarSubscriptionsData.forEach(async (subscription) => {
const tabloName = subscription.tablos.name.replace(/ /g, "_");
await writeCalendarFileToR2(s3, supabase, {
tabloName,
token: subscription.token,
tablo_id: subscription.tablo_id,
});
});
return c.json({ message: "Synced calendars" });
});