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 ( <> {type === 'http_request' ? 'HTTP Request' : type === 'supabase_function' ? 'Edge Function' : ''} } > GET POST {type === 'http_request' ? ( ) : type === 'supabase_function' && edgeFunctions.length === 0 ? (

Select which edge function to trigger

No edge functions created yet

{errors.http_url &&

{errors.http_url}

}
) : type === 'supabase_function' && edgeFunctions.length > 0 ? ( {edgeFunctions.map((fn) => { const restUrl = selectedProject?.restUrl const restUrlTld = restUrl ? new URL(restUrl).hostname.split('.').pop() : 'co' const functionUrl = `https://${ref}.supabase.${restUrlTld}/functions/v1/${fn.slug}` return ( {fn.name} ) })} ) : null} ms

} />
HTTP Headers} >
{httpHeaders.map((header, idx: number) => (
onUpdateHeader(idx, 'name', event.target.value)} /> onUpdateHeader(idx, 'value', event.target.value)} /> } className="py-4" onClick={() => onRemoveHeader(idx)} tooltip={{ content: { side: 'bottom', text: 'Remove header' } }} />
))}
{type === 'supabase_function' && (
HTTP Parameters} >
{httpParameters.map((parameter, idx: number) => (
onUpdateParameter(idx, 'name', event.target.value)} /> onUpdateParameter(idx, 'value', event.target.value)} /> } onClick={() => onRemoveParameter(idx)} tooltip={{ content: { side: 'bottom', text: 'Remove parameter' } }} />
))}
) } export default HTTPRequestFields