import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { requireViewer, viewerMiddleware } from "./middleware";
import { limitAccountWrite } from "~/server/limits";
import { confirmPassword } from "~/server/account-security";
import { destroySession } from "~/server/auth";
import { deleteUserAccount, soleOwnedOrgs } from "~/server/account-delete";
import { currentExport, readAccountExport, requestAccountExport } from "~/server/account-export";
import { notFoundError } from "~/server/errors";
export const getAccountDataSettings = createServerFn({ method: "GET" })
.middleware([viewerMiddleware])
.handler(async ({ context }) => {
const viewer = requireViewer(context.viewer);
const [orgs, pendingExport] = await Promise.all([soleOwnedOrgs(viewer.id), currentExport(viewer.id)]);
return { soleOwnedOrgs: orgs, pendingExport };
});
export const deleteAccount = createServerFn({ method: "POST" })
.middleware([viewerMiddleware])
.validator(z.object({ password: z.string().max(1024), confirm: z.string().max(100) }))
.handler(async ({ data, context }) => {
const viewer = requireViewer(context.viewer);
await limitAccountWrite(viewer);
await confirmPassword(viewer.id, data.password);
const result = await deleteUserAccount({ viewer, confirm: data.confirm });
await destroySession();
return result;
});
export const requestDataExport = createServerFn({ method: "POST" })
.middleware([viewerMiddleware])
.handler(async ({ context }) => {
const viewer = requireViewer(context.viewer);
await limitAccountWrite(viewer);
return requestAccountExport(viewer);
});
export const downloadDataExport = createServerFn({ method: "GET" })
.middleware([viewerMiddleware])