import { zodResolver } from "@hookform/resolvers/zod"; import { useQuery } from "@tanstack/react-query"; import { Button } from "@workspace/ui/components/button"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@workspace/ui/components/form"; import { ScrollArea } from "@workspace/ui/components/scroll-area"; import { Sheet, SheetContent, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, } from "@workspace/ui/components/sheet"; import { Switch } from "@workspace/ui/components/switch"; import { Icon } from "@workspace/ui/composed/icon"; import { getSignatureConfig, updateSignatureConfig, } from "@workspace/ui/services/admin/system"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { z } from "zod"; const signatureSchema = z.object({ enable_signature: z.boolean().optional(), }); type SignatureFormData = z.infer; export default function SignatureForm() { const { t } = useTranslation("system"); const [open, setOpen] = useState(false); const [loading, setLoading] = useState(false); const { data, refetch } = useQuery({ queryKey: ["getSignatureConfig"], queryFn: async () => { const { data } = await getSignatureConfig(); return data.data; }, enabled: open, }); const form = useForm({ resolver: zodResolver(signatureSchema), defaultValues: { enable_signature: false, }, }); useEffect(() => { if (data) { form.reset({ enable_signature: data.enable_signature }); } }, [data, form]); async function onSubmit(values: SignatureFormData) { setLoading(true); try { await updateSignatureConfig({ enable_signature: values.enable_signature ?? false, }); toast.success(t("signature.saveSuccess", "Save Successful")); refetch(); setOpen(false); } catch (_error) { toast.error(t("signature.saveFailed", "Save Failed")); } finally { setLoading(false); } } return (

{t("signature.title", "Request Signature")}

{t( "signature.description", "Enable or disable request signature verification for public APIs" )}

{t("signature.title", "Request Signature")}
( {t("signature.enable", "Enable Signature Verification")} {t( "signature.enableDescription", "When enabled, clients can trigger strict signature verification by sending X-Signature-Enabled: 1" )} )} />
); }