import { Schema } from "effect"; import { userIdentity } from "$lib/Data/AniList/identity"; import { deleteUserConfiguration, getUserConfiguration, setUserConfiguration, } from "$lib/Database/SB/User/configuration"; import { decodeAuthCookieOrThrow } from "$lib/Effect/authCookie"; import { decodeRequestJsonOrThrow } from "$lib/Effect/requestBody"; import { appOriginHeaders } from "$lib/Utility/appOrigin"; const unauthorised = new Response("Unauthorised", { status: 401 }); const authenticatedUserId = async (cookies: { get: (name: string) => string | undefined; }) => { const userCookie = cookies.get("user"); if (!userCookie) return null; return (await userIdentity(decodeAuthCookieOrThrow(userCookie))).id; }; export const GET = async ({ cookies, url }) => { const userId = await authenticatedUserId(cookies); const requestedUserId = Number(url.searchParams.get("id") || 0); if (!userId || requestedUserId !== userId) return unauthorised; return Response.json(await getUserConfiguration(requestedUserId), { headers: appOriginHeaders(), }); }; export const PUT = async ({ cookies, request }) => { const userId = await authenticatedUserId(cookies); if (!userId) return unauthorised; return Response.json( await setUserConfiguration(userId, { configuration: await decodeRequestJsonOrThrow( request, Schema.Record(Schema.String, Schema.Unknown), ), }), { headers: appOriginHeaders(), }, ); }; export const DELETE = async ({ cookies }) => { const userId = await authenticatedUserId(cookies); if (!userId) return unauthorised; return Response.json(await deleteUserConfiguration(userId), { headers: appOriginHeaders(), }); };