import { createHash } from 'node:crypto' import { z } from 'zod' import { requireStageTwoUser, stageTwoApiError, stageTwoRpc } from '~/server/utils/stage-two-supabase' const BodySchema = z.object({ token: z.string().trim().min(20).max(200) }).strict() export default defineEventHandler(async (event) => { try { const user = await requireStageTwoUser(event) const body = BodySchema.parse(await readBody(event)) const tokenHash = createHash('sha256').update(body.token).digest('hex') const campaignId = await stageTwoRpc('stage_two_join_campaign', { p_token_hash: tokenHash, p_user_id: user.id, }) return { campaignId } } catch (error) { stageTwoApiError(error) } })