import { useState } from 'react' import * as z from 'zod' import { zodResolver } from '@hookform/resolvers/zod' import { SubmitHandler, useForm } from 'react-hook-form' import { Button, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogSection, DialogSectionSeparator, DialogTitle, DialogTrigger, FormControl_Shadcn_, FormField_Shadcn_, Form_Shadcn_, Input_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Alert_Shadcn_, WarningIcon, } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { useCreateAPIKeyMutation } from 'data/api-keys/create-api-key-mutation' const FORM_ID = 'create-secret-api-key' const SCHEMA = z.object({ role: z.string(), description: z.string(), }) export interface CreateSecretAPIKeyModalProps { projectRef: string } const CreateSecretAPIKeyModal = ({ projectRef }: CreateSecretAPIKeyModalProps) => { const [visible, setVisible] = useState(false) const onClose = (value: boolean) => { setVisible(value) } const form = useForm>({ resolver: zodResolver(SCHEMA), defaultValues: { role: 'service_role', description: '', }, }) const { mutate: createAPIKey, isLoading: isCreatingAPIKey } = useCreateAPIKeyMutation() const onSubmit: SubmitHandler> = async (values) => { createAPIKey( { projectRef, type: 'secret', description: values.description.trim(), secret_jwt_template: values.role.trim() ? { role: values.role, } : undefined, }, { onSuccess: () => { onClose(false) }, } ) } return ( Create new secret API key Secret API keys are used to authorize requests to your project from servers, functions, workers or other backend components of your application. Keep them secret, don't publish them online and don't check them in source code.
( <> {field.value.trim() === 'service_role' && ( Row-Level Security Bypass Using service_role will bypass all RLS policies on your project. Use with care! )} )} /> ( )} />
) } export default CreateSecretAPIKeyModal