diff options
Diffstat (limited to 'src/routes/api/notifications/subscribe/+server.ts')
| -rw-r--r-- | src/routes/api/notifications/subscribe/+server.ts | 42 |
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 }); }; |