import { PermissionAction } from '@supabase/shared-types/out/constants'
import { ChevronDown, Plus, X } from 'lucide-react'
import Link from 'next/link'
import { useParams } from 'common'
import { ButtonTooltip } from 'components/ui/ButtonTooltip'
import { FormSection, FormSectionContent, FormSectionLabel } from 'components/ui/Forms/FormSection'
import { getKeys, useAPIKeysQuery } from 'data/api-keys/api-keys-query'
import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query'
import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions'
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import { uuidv4 } from 'lib/helpers'
import {
Button,
cn,
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuSeparator,
DropdownMenuTrigger,
Input,
Listbox,
SidePanel,
} from 'ui'
import { HTTPArgument } from './EditHookPanel'
interface HTTPRequestFieldsProps {
type: 'http_request' | 'supabase_function'
errors: any
httpHeaders: HTTPArgument[]
httpParameters: HTTPArgument[]
onAddHeaders: (headers?: any[]) => void
onUpdateHeader: (idx: number, property: string, value: string) => void
onRemoveHeader: (idx: number) => void
onAddParameter: () => void
onUpdateParameter: (idx: number, property: string, value: string) => void
onRemoveParameter: (idx: number) => void
}
const HTTPRequestFields = ({
type,
errors,
httpHeaders = [],
httpParameters = [],
onAddHeaders,
onUpdateHeader,
onRemoveHeader,
onAddParameter,
onUpdateParameter,
onRemoveParameter,
}: HTTPRequestFieldsProps) => {
const { ref } = useParams()
const { data: selectedProject } = useSelectedProjectQuery()
const { can: canReadAPIKeys } = useAsyncCheckPermissions(PermissionAction.SECRETS_READ, '*')
const { data: functions } = useEdgeFunctionsQuery({ projectRef: ref })
const { data: apiKeys } = useAPIKeysQuery(
{ projectRef: ref, reveal: true },
{ enabled: canReadAPIKeys }
)
const edgeFunctions = functions ?? []
const { serviceKey, secretKey } = getKeys(apiKeys)
const apiKey = secretKey?.api_key ?? serviceKey?.api_key ?? '[YOUR API KEY]'
return (
<>
Select which edge function to trigger No edge functions created yet {errors.http_url}
Add auth header with secret key
Required if your edge function enforces JWT verification
Add custom source header
Useful to verify that the edge function was triggered from this webhook