import { fail, redirect } from '@sveltejs/kit'; import { redeemOtp } from '$lib/server/member-otp'; import { slugify, handle } from '@shared/slugify'; import { setSessionCookie, clearLegacyCookies } from '$lib/server/session'; export const actions = { default: async (event) => { const fd = await event.request.formData(); const famName = (fd.get('family') || '').toString().trim(); const name = (fd.get('name') || '').toString().trim(); const otp = (fd.get('otp') || '').toString().trim(); if (!famName) return fail(400, { error: 'Enter your family name.', famName, name, otp }); if (!name) return fail(400, { error: 'Enter your name.', famName, name, otp }); if (!otp) return fail(400, { error: 'Enter the code shown by your parent.', famName, name, otp }); const famSlug = slugify(famName); try { const token = await redeemOtp({ famSlug, username: name, otp }); clearLegacyCookies(event.cookies); setSessionCookie(event.cookies, token); } catch (e) { return fail(400, { error: e instanceof Error ? e.message : 'Join failed', famName, name, otp }); } const handleName = handle(name); throw redirect(303, `/${famSlug}/${encodeURIComponent(handleName)}`); } };