'use client' import type { FC } from 'react' import type { FirecrawlConfig } from '@/models/common' import * as React from 'react' import { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import Button from '@/app/components/base/button' import { LinkExternal02 } from '@/app/components/base/icons/src/vender/line/general' import { Lock01 } from '@/app/components/base/icons/src/vender/solid/security' import { PortalToFollowElem, PortalToFollowElemContent, } from '@/app/components/base/portal-to-follow-elem' import Toast from '@/app/components/base/toast' import Field from '@/app/components/datasets/create/website/base/field' import { createDataSourceApiKeyBinding } from '@/service/datasets' type Props = { onCancel: () => void onSaved: () => void } const I18N_PREFIX = 'firecrawl' const DEFAULT_BASE_URL = 'https://api.firecrawl.dev' const ConfigFirecrawlModal: FC = ({ onCancel, onSaved, }) => { const { t } = useTranslation() const [isSaving, setIsSaving] = useState(false) const [config, setConfig] = useState({ api_key: '', base_url: '', }) const handleConfigChange = useCallback((key: string) => { return (value: string | number) => { setConfig(prev => ({ ...prev, [key]: value as string })) } }, []) const handleSave = useCallback(async () => { if (isSaving) return let errorMsg = '' if (config.base_url && !((config.base_url.startsWith('http://') || config.base_url.startsWith('https://')))) errorMsg = t('errorMsg.urlError', { ns: 'common' }) if (!errorMsg) { if (!config.api_key) { errorMsg = t('errorMsg.fieldRequired', { ns: 'common', field: 'API Key', }) } } if (errorMsg) { Toast.notify({ type: 'error', message: errorMsg, }) return } const postData = { category: 'website', provider: 'firecrawl', credentials: { auth_type: 'bearer', config: { api_key: config.api_key, base_url: config.base_url || DEFAULT_BASE_URL, }, }, } try { setIsSaving(true) await createDataSourceApiKeyBinding(postData) Toast.notify({ type: 'success', message: t('api.success', { ns: 'common' }), }) } finally { setIsSaving(false) } onSaved() }, [config.api_key, config.base_url, onSaved, t, isSaving]) return (
{t(`${I18N_PREFIX}.configFirecrawl`, { ns: 'datasetCreation' })}
{t(`${I18N_PREFIX}.getApiKeyLinkText`, { ns: 'datasetCreation' })}
{t('modelProvider.encrypted.front', { ns: 'common' })} PKCS1_OAEP {t('modelProvider.encrypted.back', { ns: 'common' })}
) } export default React.memo(ConfigFirecrawlModal)