aboutsummaryrefslogtreecommitdiff
path: root/src/routes/api/notifications/subscribe/+server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/routes/api/notifications/subscribe/+server.ts')
-rw-r--r--src/routes/api/notifications/subscribe/+server.ts42
1 files changed, 24 insertions, 18 deletions
diff --git a/src/routes/api/notifications/subscribe/+server.ts b/src/routes/api/notifications/subscribe/+server.ts
index d410dc9d..203470e0 100644
--- a/src/routes/api/notifications/subscribe/+server.ts
+++ b/src/routes/api/notifications/subscribe/+server.ts
@@ -1,27 +1,33 @@
-import { userIdentity } from '$lib/Data/AniList/identity';
-import { setUserSubscription } from '$lib/Database/SB/User/notifications';
+import { safeUserIdentity } from "$lib/Data/AniList/identity";
+import { setUserSubscription } from "$lib/Database/SB/User/notifications";
+import { decodeAuthCookieOrNull } from "$lib/Effect/authCookie";
+import { decodeRequestJsonOrThrow } from "$lib/Effect/requestBody";
+import { Schema } from "effect";
-const unauthorised = new Response('Unauthorised', { status: 401 });
+const unauthorised = new Response("Unauthorised", { status: 401 });
export const POST = async ({ cookies, request, url }) => {
- const userCookie = cookies.get('user');
- const fingerprint = url.searchParams.get('p');
+ const userCookie = cookies.get("user");
+ const fingerprint = url.searchParams.get("p");
- if (!userCookie || !fingerprint) return unauthorised;
+ if (!userCookie || !fingerprint) return unauthorised;
- const user = JSON.parse(userCookie);
- const userId = (
- await userIdentity({
- tokenType: user['token_type'],
- expiresIn: user['expires_in'],
- accessToken: user['access_token'],
- refreshToken: user['refresh_token']
- })
- ).id;
+ const user = decodeAuthCookieOrNull(userCookie);
- if (!userId) return unauthorised;
+ if (!user) return unauthorised;
- await setUserSubscription(userId, await request.json(), fingerprint);
+ const userId = (await safeUserIdentity(user))?.id;
- return new Response(null, { status: 200 });
+ if (!userId) return unauthorised;
+
+ await setUserSubscription(
+ userId,
+ (await decodeRequestJsonOrThrow(
+ request,
+ Schema.Record(Schema.String, Schema.Unknown),
+ )) as unknown as JSON,
+ fingerprint,
+ );
+
+ return new Response(null, { status: 200 });
};