"use server"; import { revalidatePath } from "next/cache"; import { api, ApiError, unwrap } from "@/lib/api"; import { field } from "@/lib/actions"; export type RegisterState = { error?: string; registered?: { id: string; name: string; key: string } } | null; /** Registers a catalog; its key is in the answer, the only time it's shown. */ export async function registerCatalog(_: RegisterState, form: FormData): Promise { try { const { catalog, key } = unwrap( await api.catalogs.post({ name: field(form, "name"), url: field(form, "url"), contact: field(form, "contact"), visibility: field(form, "visibility"), membership: field(form, "membership"), }), ); revalidatePath("/catalogs"); return { registered: { id: catalog.id, name: catalog.name, key } }; } catch (e) { if (e instanceof ApiError) return { error: e.message }; throw e; } }