diff --git a/frontend/src/pages/Admin/AgentBuilder/nodes/ApiCallNode/ImportFromCurlModal/index.jsx b/frontend/src/pages/Admin/AgentBuilder/nodes/ApiCallNode/ImportFromCurlModal/index.jsx new file mode 100644 index 00000000000..aeb532dfa9b --- /dev/null +++ b/frontend/src/pages/Admin/AgentBuilder/nodes/ApiCallNode/ImportFromCurlModal/index.jsx @@ -0,0 +1,139 @@ +import React, { useState } from "react"; +import { X } from "@phosphor-icons/react"; +import { parseCurlCommand, isValidCurlCommand } from "@/utils/curlParser"; +import showToast from "@/utils/toast"; +import ModalWrapper from "@/components/ModalWrapper"; + +export default function ImportFromCurlModal({ isOpen, onClose, onImport }) { + const [curlInput, setCurlInput] = useState(""); + + const handleImportCurl = () => { + if (!curlInput.trim()) { + showToast("Please enter a cURL command", "error"); + return; + } + + if (!isValidCurlCommand(curlInput)) { + showToast( + "Please enter a valid cURL command (must start with 'curl')", + "error" + ); + return; + } + + try { + const parsedConfig = parseCurlCommand(curlInput); + + onImport({ + url: parsedConfig.url, + method: parsedConfig.method, + headers: parsedConfig.headers, + body: parsedConfig.body, + bodyType: parsedConfig.bodyType, + formData: parsedConfig.formData, + }); + + setCurlInput(""); + showToast("cURL command imported successfully", "success"); + } catch (error) { + showToast(error.message, "error"); + } + }; + + const handleClose = () => { + setCurlInput(""); + onClose(); + }; + + return ( + +
+
+

+ Import from cURL +

+ +
+ +
+
+ +