import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, FormDescription, } from "@/components/ui/form"; import { useCustomCredentialServiceConfig } from "@/hooks/useCustomCredentialServiceConfig"; import { EyeOpenIcon, EyeClosedIcon, GlobeIcon } from "@radix-ui/react-icons"; const CustomCredentialServiceConfigSchema = z .object({ api_base_url: z .string() .min(1, "API Base URL is required") .url("Must be a valid URL"), api_token: z.string().min(1, "API Token is required"), }) .strict(); const formSchema = z .object({ config: CustomCredentialServiceConfigSchema, }) .strict(); type FormData = z.infer; export function CustomCredentialServiceConfigForm() { const [showApiToken, setShowApiToken] = useState(false); const { customCredentialServiceAuthToken, parsedConfig, isLoading, createOrUpdateConfig, isUpdating, } = useCustomCredentialServiceConfig(); const form = useForm({ resolver: zodResolver(formSchema), defaultValues: { config: parsedConfig || { api_base_url: "", api_token: "", }, }, }); const onSubmit = (data: FormData) => { createOrUpdateConfig(data); }; const toggleApiTokenVisibility = () => { setShowApiToken((v) => !v); }; useEffect(() => { if (parsedConfig) { form.reset({ config: parsedConfig }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [parsedConfig]); return (

Custom Credential Service

Configure your custom HTTP API for credential management. Your API should support the standard CRUD operations.

{customCredentialServiceAuthToken && (
Status: {customCredentialServiceAuthToken.valid ? "Active" : "Inactive"}
)}
( API Base URL The base URL of your custom credential service API (e.g., https://credentials.company.com/api/v1)
)} /> ( API Token Bearer token for authenticating with your custom credential service
)} />
{customCredentialServiceAuthToken && (
Last updated:{" "} {new Date( customCredentialServiceAuthToken.modified_at, ).toLocaleDateString()}
)}
{customCredentialServiceAuthToken && (

Configuration Information

ID: {customCredentialServiceAuthToken.id}
Type: {customCredentialServiceAuthToken.token_type}
Created:{" "} {new Date( customCredentialServiceAuthToken.created_at, ).toLocaleDateString()}
{parsedConfig && (
Configured API URL:{" "} {parsedConfig.api_base_url}
Token (masked):{" "} {parsedConfig.api_token.length > 8 ? `${parsedConfig.api_token.slice(0, 8)}...` : "********"}
)}
)}
); }