metatron-open-seo/src/serverFunctions/redditConversions.ts
2026-05-20 23:36:30 -04:00

29 lines
1.1 KiB
TypeScript

import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { captureRedditConversion } from "@/server/lib/reddit-conversions";
import { redditAttributionSchema } from "@/shared/reddit-attribution";
import { requireAuthenticatedContext } from "@/serverFunctions/middleware";
const conversionInputSchema = z.object({
attribution: redditAttributionSchema,
eventType: z.enum(["SignUp", "Purchase"]),
});
export const captureRedditConversionEvent = createServerFn({ method: "POST" })
.middleware(requireAuthenticatedContext)
.inputValidator((data: unknown) => conversionInputSchema.parse(data))
.handler(async ({ data, context }) => {
const status = await captureRedditConversion({
attribution: data.attribution,
conversionId: `${data.eventType.toLowerCase()}:${context.userId}`,
email: context.userEmail,
eventType: data.eventType,
organizationId: context.organizationId,
userId: context.userId,
valueDecimal: data.eventType === "Purchase" ? 10 : undefined,
currency: data.eventType === "Purchase" ? "USD" : undefined,
});
return { status };
});