Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,33 @@
{
"extends": [
"../../../../.eslintrc.base.json"
],
"ignorePatterns": [
"!**/*"
],
"overrides": [
{
"files": [
"*.ts",
"*.tsx",
"*.js",
"*.jsx"
],
"rules": {}
},
{
"files": [
"*.ts",
"*.tsx"
],
"rules": {}
},
{
"files": [
"*.js",
"*.jsx"
],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-firecrawl
This library was generated with [Nx](https://nx.dev).
## Building
Run `nx build pieces-firecrawl` to build the library.

View File

@@ -0,0 +1,4 @@
{
"name": "@activepieces/piece-firecrawl",
"version": "0.2.1"
}

View File

@@ -0,0 +1,65 @@
{
"name": "pieces-firecrawl",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/firecrawl/src",
"projectType": "library",
"release": {
"version": {
"currentVersionResolver": "git-tag",
"preserveLocalDependencyProtocols": false,
"manifestRootsToUpdate": [
"dist/{projectRoot}"
]
}
},
"tags": [],
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/firecrawl",
"tsConfig": "packages/pieces/community/firecrawl/tsconfig.lib.json",
"packageJson": "packages/pieces/community/firecrawl/package.json",
"main": "packages/pieces/community/firecrawl/src/index.ts",
"assets": [
"packages/pieces/community/firecrawl/*.md",
{
"input": "packages/pieces/community/firecrawl/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"nx-release-publish": {
"options": {
"packageRoot": "dist/{projectRoot}"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/firecrawl",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
}
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Extrahieren Sie strukturierte Daten von Webseiten mit Hilfe von KI mit natürlichen Sprachabfragen",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFolge diesen Schritten, um deinen Firecrawl API-Schlüssel zu erhalten:\n\n1. Besuche [Firecrawl](https://firecrawl.dev) und erstelle ein Konto.\n2. Melden Sie sich an und navigieren Sie zu Ihrem Dashboard.\n3. Suchen und kopieren Sie Ihren API-Schlüssel aus dem Abschnitt API-Einstellungen.\n",
"Scrape Website": "Scrape Webseite",
"Extract Structured Data": "Strukturierte Daten extrahieren",
"Crawl": "Crawl",
"Crawl Results": "Crawl-Ergebnisse",
"Map Websites": "Karten-Websites",
"Custom API Call": "Eigener API-Aufruf",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape eine Website, indem du eine Reihe von Aktionen durchführst, wie zum Beispiel Klicken, tippen, Screenshots machen und Daten extrahieren.",
"Extract structured data from multiple URLs using AI.": "Extrahieren Sie strukturierte Daten aus mehreren URLs mit Hilfe von KI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Wechseln Sie mehrere Seiten einer Website basierend auf bestimmten Regeln und Mustern.",
"Get the results of a crawl job.": "Holen Sie sich die Ergebnisse eines Crawl-Jobs.",
"Input a website and get all the urls on the website.": "Geben Sie eine Webseite ein und holen Sie sich alle Urls auf der Website.",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Website URL": "Website-URL",
"Timeout (ms)": "Timeout (ms)",
"Perform Actions Before Scraping": "Aktionen vor dem Schrotten ausführen",
"Action Properties": "Aktionseigenschaften",
"Output Format": "Ausgabeformat",
"Extraction Prompt": "Prompt für Extraktion",
"Schema Mode": "Schema-Modus",
"Data Definition": "Datendefinition",
"URLs": "URLs",
"Enable Web Search": "Websuche aktivieren",
"Timeout (seconds)": "Timeout (Sekunden)",
"Data Schema Type": "Datentyp",
"URL": "URL",
"Prompt": "Prompt",
"Limit": "Limit",
"Only Main Content": "Nur Hauptinhalte",
"Deliver Results to Webhook": "Ergebnisse an Webhook übermitteln",
"Webhook Properties": "Webhook Eigenschaften",
"Crawl ID": "Crawl-ID",
"Main Website URL": "Haupt-Website-URL",
"Include subdomain": "Subdomain einbeziehen",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"The webpage URL to scrape.": "Die URL der Webseite.",
"Maximum time to wait for the page to load (in milliseconds).": "Maximale Wartezeit, bis die Seite geladen wird (in Millisekunden).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Aktivieren, um eine Reihe von Aktionen auf der Seite vor dem Scraping auszuführen (z.B. Klicken Sie auf Schaltflächen, Füllformulare etc.). Siehe [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) für Details über verfügbare Aktionen und deren Parameter.",
"Properties for actions that will be performed on the page.": "Eigenschaften für Aktionen, die auf der Seite ausgeführt werden.",
"Choose what format you want your output in.": "Wählen Sie in welchem Format Sie Ihre Ausgabe möchten.",
"Prompt for extracting data.": "Prompt zum Extrahieren von Daten.",
"Data schema type.": "Datentyp.",
"Add one or more URLs to extract data from.": "Fügen Sie eine oder mehrere URLs hinzu, aus denen Daten extrahiert werden können.",
"Describe what information you want to extract.": "Beschreiben Sie, welche Informationen Sie extrahieren möchten.",
"Enable web search to find additional context.": "Websuche aktivieren, um zusätzlichen Kontext zu finden.",
"Timeout in seconds after which the task will be cancelled": "Timeout in Sekunden, nach der die Aufgabe abgebrochen wird",
"For complex schema, you can use advanced mode.": "Für ein komplexes Schema können Sie den erweiterten Modus verwenden.",
"The base URL to start crawling from.": "Die Basis-URL, von der aus Crawlen gestartet werden soll.",
"Maximum number of pages to crawl. Default limit is 10.": "Maximale Anzahl der zu crawlenden Seiten. Standardwert ist 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Gibt nur den Hauptinhalt der Seite zurück, ohne Kopf- und Navigationszeilen, Fußzeilen, etc.",
"Enable to send crawl results to a webhook URL.": "Aktivieren, um Crawl-Ergebnisse an eine Webhook-URL zu senden.",
"Properties for webhook configuration.": "Eigenschaften für Webhook Konfiguration.",
"The ID of the crawl job to check.": "Die ID des zu überprüfenden Crawl-Jobs.",
"The webpage URL to start scraping from.": "Die URL der Webseite, von der das Verschrotten gestartet wird.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Fügen Sie neben der Haupt-Domain auch Seiten aus Subdomains der Ziel-Website (z.B. blog.example.com, shop.example.com) hinzu und crawl Seiten aus Subdomains der Ziel-Website (z.B. blog.example.com, shop.example.com).",
"Maximum number of links to return (max: 100,000)": "Maximale Anzahl der zurückzugebenden Links (max: 100.000)",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Simple": "Einfach",
"Advanced": "Erweitert",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Extraer datos estructurados de sitios web usando IA con indicaciones de lenguaje natural",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "Sitio web Scrape",
"Extract Structured Data": "Extraer datos estructurados",
"Crawl": "Cortar",
"Crawl Results": "Resultados de rastreo",
"Map Websites": "Mapa sitios web",
"Custom API Call": "Llamada API personalizada",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape un sitio web realizando una serie de acciones como hacer clic, teclear, tomar capturas de pantalla y extraer datos.",
"Extract structured data from multiple URLs using AI.": "Extraer datos estructurados de múltiples URLs usando AI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Arrastre varias páginas de un sitio web basadas en reglas y patrones especificados.",
"Get the results of a crawl job.": "Obtener los resultados de un trabajo de rasguño.",
"Input a website and get all the urls on the website.": "Ingrese un sitio web y obtenga todas las urls en el sitio web.",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Website URL": "URL del sitio web",
"Timeout (ms)": "Tiempo agotado (ms)",
"Perform Actions Before Scraping": "Realizar acciones antes de ser raspado",
"Action Properties": "Propiedades de la acción",
"Output Format": "Formato de salida",
"Extraction Prompt": "Prompt de extracción",
"Schema Mode": "Modo Esquema",
"Data Definition": "Definición de datos",
"URLs": "URLs",
"Enable Web Search": "Habilitar búsqueda web",
"Timeout (seconds)": "Tiempo agotado (segundos)",
"Data Schema Type": "Tipo de esquema de datos",
"URL": "URL",
"Prompt": "Petición",
"Limit": "Límite",
"Only Main Content": "Sólo contenido principal",
"Deliver Results to Webhook": "Entregar resultados a Webhook",
"Webhook Properties": "Propiedades Webhook",
"Crawl ID": "ID de rastreo",
"Main Website URL": "URL principal del sitio web",
"Include subdomain": "Incluye subdominio",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"The webpage URL to scrape.": "La URL de la página web a scrape.",
"Maximum time to wait for the page to load (in milliseconds).": "Tiempo máximo para esperar a que la página se cargue (en milisegundos).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Activar para realizar una secuencia de acciones en la página antes de rascar (como pulsar botones, rellenar formularios, etc.). Vea [Documentación de Acciones de Firecrawl](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) para más detalles sobre las acciones disponibles y sus parámetros.",
"Properties for actions that will be performed on the page.": "Propiedades de las acciones que se realizarán en la página.",
"Choose what format you want your output in.": "Elija en qué formato desea su salida.",
"Prompt for extracting data.": "Asunto para la extracción de datos.",
"Data schema type.": "Tipo de esquema de datos.",
"Add one or more URLs to extract data from.": "Añadir una o más URLs para extraer datos.",
"Describe what information you want to extract.": "Describa qué información desea extraer.",
"Enable web search to find additional context.": "Activa la búsqueda web para encontrar un contexto adicional.",
"Timeout in seconds after which the task will be cancelled": "Tiempo de espera en segundos tras el cual la tarea será cancelada",
"For complex schema, you can use advanced mode.": "Para esquemas complejos, puede utilizar el modo avanzado.",
"The base URL to start crawling from.": "La URL base desde la que empezar a rascar.",
"Maximum number of pages to crawl. Default limit is 10.": "Número máximo de páginas a rascar. El límite por defecto es 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Sólo devuelve el contenido principal de la página, excluyendo cabeceras, naves, pie de página, etc.",
"Enable to send crawl results to a webhook URL.": "Activar para enviar resultados de crawl a una URL de webhook.",
"Properties for webhook configuration.": "Propiedades para la configuración de webhook.",
"The ID of the crawl job to check.": "El ID de la tarea de raspado a comprobar.",
"The webpage URL to start scraping from.": "La URL de la página web desde la que empezar a rascar.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Incluye y crawl páginas de los subdominios del sitio web de destino (por ejemplo, blog.example.com, shop.example.com) además del dominio principal.",
"Maximum number of links to return (max: 100,000)": "Número máximo de enlaces a devolver (máximo: 100,000)",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Simple": "Simple",
"Advanced": "Avanzado",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Extraire des données structurées à partir de sites Web utilisant une IA avec des instructions de langage naturel",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "Site Web de Scrape",
"Extract Structured Data": "Extraire des données structurées",
"Crawl": "Rampes",
"Crawl Results": "Résultats de Crawl",
"Map Websites": "Sites web cartographiques",
"Custom API Call": "Appel API personnalisé",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape un site Web en effectuant une série d'actions telles que le clic, la saisie, la prise de captures d'écran et l'extraction de données.",
"Extract structured data from multiple URLs using AI.": "Extraire des données structurées à partir de multiples URLs en utilisant AI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Crawl plusieurs pages à partir d'un site Web basé sur des règles et des motifs spécifiés.",
"Get the results of a crawl job.": "Obtenez les résultats d'une tâche d'exploration.",
"Input a website and get all the urls on the website.": "Entrez un site web et obtenez toutes les URLs sur le site.",
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
"Website URL": "URL du site web",
"Timeout (ms)": "Délai d'attente (ms)",
"Perform Actions Before Scraping": "Effectuer des actions avant la fouille",
"Action Properties": "Propriétés de l'action",
"Output Format": "Format de sortie",
"Extraction Prompt": "Proposition d'extraction",
"Schema Mode": "Mode Schéma",
"Data Definition": "Définition des données",
"URLs": "URLs",
"Enable Web Search": "Activer la recherche Web",
"Timeout (seconds)": "Délai d'attente (secondes)",
"Data Schema Type": "Type de schéma de données",
"URL": "URL",
"Prompt": "Prompt",
"Limit": "Limite",
"Only Main Content": "Seulement le contenu principal",
"Deliver Results to Webhook": "Livrer les résultats au Webhook",
"Webhook Properties": "Propriétés du Webhook",
"Crawl ID": "ID du rampe",
"Main Website URL": "URL du site web principal",
"Include subdomain": "Inclure le sous-domaine",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'attente (en secondes)",
"The webpage URL to scrape.": "L'URL de la page Web à explorer.",
"Maximum time to wait for the page to load (in milliseconds).": "Temps d'attente maximum pour le chargement de la page (en millisecondes).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Activer pour effectuer une séquence d'actions sur la page avant de gratter (comme cliquer sur des boutons, remplir des formulaires, etc.). Voir [Documentation des actions de Firecrawl](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) pour plus de détails sur les actions disponibles et leurs paramètres.",
"Properties for actions that will be performed on the page.": "Propriétés des actions qui seront effectuées sur la page.",
"Choose what format you want your output in.": "Choisissez le format dans lequel vous voulez afficher votre sortie.",
"Prompt for extracting data.": "Demander l'extraction de données.",
"Data schema type.": "Type de schéma de données.",
"Add one or more URLs to extract data from.": "Ajoutez une ou plusieurs URLs pour extraire des données.",
"Describe what information you want to extract.": "Décrivez quelles informations vous voulez extraire.",
"Enable web search to find additional context.": "Activer la recherche web pour trouver un contexte supplémentaire.",
"Timeout in seconds after which the task will be cancelled": "Délai d'attente en secondes après lequel la tâche sera annulée",
"For complex schema, you can use advanced mode.": "Pour le schéma complexe, vous pouvez utiliser le mode avancé.",
"The base URL to start crawling from.": "L'URL de base pour commencer à explorer.",
"Maximum number of pages to crawl. Default limit is 10.": "Nombre maximum de pages à explorer. La limite par défaut est de 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Renvoie uniquement le contenu principal de la page, en excluant les en-têtes, les navs, les pieds de page, etc.",
"Enable to send crawl results to a webhook URL.": "Activer pour envoyer les résultats d'exploration à une URL de webhook.",
"Properties for webhook configuration.": "Propriétés pour la configuration du webhook.",
"The ID of the crawl job to check.": "L'ID de la tâche d'exploration à vérifier.",
"The webpage URL to start scraping from.": "L'URL de la page Web à partir de laquelle commencer à gratter.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Inclure et explorer les pages des sous-domaines du site web cible (par exemple, blog.example.com, shop.example.com) en plus du domaine principal.",
"Maximum number of links to return (max: 100,000)": "Nombre maximum de liens à retourner (max: 100,000)",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"Simple": "Simple",
"Advanced": "Avancé",
"GET": "OBTENIR",
"POST": "POSTER",
"PATCH": "PATCH",
"PUT": "EFFACER",
"DELETE": "SUPPRIMER",
"HEAD": "TÊTE"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "自然言語プロンプトでAIを使用してウェブサイトから構造化データを抽出する",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "ウェブサイトをスクレイプ",
"Extract Structured Data": "構造化データの抽出",
"Crawl": "Crawl",
"Crawl Results": "Crawl の結果",
"Map Websites": "ウェブサイトのマップ",
"Custom API Call": "カスタムAPI通話",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "クリック、入力、スクリーンショットの取得、データの抽出など、一連のアクションを実行してウェブサイトをスクラップします。",
"Extract structured data from multiple URLs using AI.": "AIを使用して複数のURLから構造化データを抽出します。",
"Crawl multiple pages from a website based on specified rules and patterns.": "指定されたルールとパターンに基づいてウェブサイトから複数のページをクロールします。",
"Get the results of a crawl job.": "クロールジョブの結果を取得します。",
"Input a website and get all the urls on the website.": "ウェブサイトを入力し、ウェブサイト上のすべてのURLを取得します。",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Website URL": "Website URL",
"Timeout (ms)": "タイムアウト (ミリ秒)",
"Perform Actions Before Scraping": "スクラップする前にアクションを実行",
"Action Properties": "アクションのプロパティ",
"Output Format": "出力形式",
"Extraction Prompt": "Extraction Prompt",
"Schema Mode": "スキーマモード",
"Data Definition": "データ定義",
"URLs": "URL",
"Enable Web Search": "ウェブ検索を有効にする",
"Timeout (seconds)": "タイムアウト (秒)",
"Data Schema Type": "データスキーマタイプ",
"URL": "URL",
"Prompt": "Prompt",
"Limit": "制限",
"Only Main Content": "メインコンテンツのみ",
"Deliver Results to Webhook": "Webhookに結果を配信",
"Webhook Properties": "Webhook プロパティ",
"Crawl ID": "クロールID",
"Main Website URL": "ウェブサイトのメインURL",
"Include subdomain": "サブドメインを含める",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"The webpage URL to scrape.": "スクレイプするウェブページのURL。",
"Maximum time to wait for the page to load (in milliseconds).": "ページがロードされるまでの最大時間 (ミリ秒単位)。",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "ページをスクレイピングする前に一連のアクションを実行する (クリックボタン、フォームの入力など) を有効にします。 利用可能なアクションとパラメータの詳細については、[Firerawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions)を参照してください。",
"Properties for actions that will be performed on the page.": "ページ上で実行されるアクションのプロパティ。",
"Choose what format you want your output in.": "出力するフォーマットを選択します。",
"Prompt for extracting data.": "データの抽出を促します。",
"Data schema type.": "データスキーマ型。",
"Add one or more URLs to extract data from.": "データを抽出するために 1 つ以上の URL を追加します。",
"Describe what information you want to extract.": "抽出したい情報を記述してください。",
"Enable web search to find additional context.": "追加のコンテキストを見つけるためにWeb検索を有効にします。",
"Timeout in seconds after which the task will be cancelled": "タスクがキャンセルされるまで数秒後にタイムアウトします",
"For complex schema, you can use advanced mode.": "複雑なスキーマでは、高度なモードを使用できます。",
"The base URL to start crawling from.": "クロールを開始するベースURL。",
"Maximum number of pages to crawl. Default limit is 10.": "クロールするページの最大数。デフォルトの制限は 10 です。",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "ヘッダー、ナビ、フッターなどを除いたページのメインコンテンツのみを返します。",
"Enable to send crawl results to a webhook URL.": "クロール結果をWebhookのURLに送信するよう有効にします。",
"Properties for webhook configuration.": "Webhook設定のプロパティです。",
"The ID of the crawl job to check.": "チェックするクロールジョブのID。",
"The webpage URL to start scraping from.": "スクレイピングを開始するウェブページのURL。",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "メインドメインに加えて、対象のウェブサイトのサブドメイン(blog.example.com、shop.example.comなど)からページを含めてクロールします。",
"Maximum number of links to return (max: 100,000)": "リターンするリンクの最大数最大100,000",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Simple": "単純な",
"Advanced": "高度な設定",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Haal gestructureerde gegevens uit websites met behulp van AI met natuurlijke taalprompts uit",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nVolg deze stappen om uw Firecrawl API Key te verkrijgen:\n\n1. Bezoek [Firecrawl](https://firecrawl.dev) en maak een account aan.\n2. Log in en navigeer naar uw dashboard.\n3. Zoek en kopieer uw API-sleutel vanuit de API-instellingen sectie.\n",
"Scrape Website": "Scrape Website",
"Extract Structured Data": "Extract gestructureerde gegevens",
"Crawl": "Crawl",
"Crawl Results": "Crawl resultaten",
"Map Websites": "Kaart websites",
"Custom API Call": "Custom API Call",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrapen een website door een reeks acties uit te voeren zoals klikken, typen, screenshots maken en gegevens uitpakken.",
"Extract structured data from multiple URLs using AI.": "Haal gestructureerde gegevens uit meerdere URL's met behulp van AI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Crawl meerdere pagina's van een website gebaseerd op specifieke regels en patronen.",
"Get the results of a crawl job.": "Krijg het resultaat van een crawl job.",
"Input a website and get all the urls on the website.": "Voer een website in en krijg alle URL's op de website.",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Website URL": "Website URL",
"Timeout (ms)": "Time-out (ms)",
"Perform Actions Before Scraping": "Acties uitvoeren voor scraping",
"Action Properties": "Actie Eigenschappen",
"Output Format": "Uitvoer formaat",
"Extraction Prompt": "Extractie Prompt",
"Schema Mode": "Schema Modus",
"Data Definition": "Datadefinitie",
"URLs": "URL's",
"Enable Web Search": "Web zoeken inschakelen",
"Timeout (seconds)": "Time-out (seconden)",
"Data Schema Type": "Data Schema Type",
"URL": "URL",
"Prompt": "Prompt",
"Limit": "Limiet",
"Only Main Content": "Alleen hoofdinhoud",
"Deliver Results to Webhook": "Resultaten leveren aan Webhook",
"Webhook Properties": "Webhook eigenschappen",
"Crawl ID": "Crawl ID",
"Main Website URL": "Hoofd Website URL",
"Include subdomain": "Inclusief subdomein",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"The webpage URL to scrape.": "De URL van de webpagina om te scrapen.",
"Maximum time to wait for the page to load (in milliseconds).": "Maximale wachttijd voor het laden van de pagina (in milliseconden).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Inschakelen om een reeks van acties uit te voeren op de pagina voordat u scrapt (zoals op knoppen, invullen van formulieren, enz.). Zie [Firecrawl Acties Documentatie](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) voor meer informatie over beschikbare acties en hun parameters.",
"Properties for actions that will be performed on the page.": "Eigenschappen voor acties die worden uitgevoerd op de pagina.",
"Choose what format you want your output in.": "Kies in welk formaat je uitvoer wilt hebben.",
"Prompt for extracting data.": "Naar uitpakken van gegevens.",
"Data schema type.": "Data schema type.",
"Add one or more URLs to extract data from.": "Voeg een of meer URL's toe om gegevens van te extraheren.",
"Describe what information you want to extract.": "Beschrijf welke informatie je wilt extraheren.",
"Enable web search to find additional context.": "Schakel webzoeken in om extra context te vinden.",
"Timeout in seconds after which the task will be cancelled": "Time-out in seconden waarna de taak wordt geannuleerd",
"For complex schema, you can use advanced mode.": "Voor complexe schema's kunt u de geavanceerde modus gebruiken.",
"The base URL to start crawling from.": "De basis-URL waar gecrawt vanaf moet worden.",
"Maximum number of pages to crawl. Default limit is 10.": "Maximum aantal pagina's om te crawen. Standaard limiet is 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Geef alleen de hoofdinhoud van de pagina, exclusief kopteksten, navs, voeten, enz.",
"Enable to send crawl results to a webhook URL.": "Inschakelen om crawl resultaten te verzenden naar een webhook URL.",
"Properties for webhook configuration.": "Eigenschappen voor webhook configuratie.",
"The ID of the crawl job to check.": "Het ID van de crawl job om te controleren.",
"The webpage URL to start scraping from.": "De webpagina-URL om te beginnen met scrapen.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Inclusief en crawl pagina's van subdomeinen van de doelwebsite (bijv. blog.example.com, shop.example.com) als aanvulling op het hoofddomein.",
"Maximum number of links to return (max: 100,000)": "Maximum aantal terug te sturen links (max: 100,000)",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Simple": "Eenvoudig",
"Advanced": "Geavanceerd",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Extraia dados estruturados de sites usando AI com prompts de linguagem natural",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nSiga estes passos para obter sua chave de API do Firecrawl:\n\n1. Visite [Firecrawl](https://firecrawl.dev) e crie uma conta.\n2. Entre e navegue para o seu painel.\n3. Localize e copie sua chave de API na seção de configurações da API.\n",
"Scrape Website": "Site Scrape",
"Extract Structured Data": "Extrair Dados Estruturados",
"Crawl": "Rastejador",
"Crawl Results": "Resultados Rastejantes",
"Map Websites": "Sites do Mapa",
"Custom API Call": "Chamada de API personalizada",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape um site realizando uma série de ações como clicar, digitar, tirar capturas de tela e extrair dados.",
"Extract structured data from multiple URLs using AI.": "Extraia dados estruturados de várias URLs usando AI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Engrade várias páginas de um site baseado em regras e padrões especificados.",
"Get the results of a crawl job.": "Obtenha os resultados de um trabalho crawl.",
"Input a website and get all the urls on the website.": "Insira um site e pegue todas as urls do site.",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Website URL": "URL do site",
"Timeout (ms)": "Tempo limite (ms)",
"Perform Actions Before Scraping": "Realizar Ações Antes do Scraping",
"Action Properties": "Propriedades da ação",
"Output Format": "Formato de saída",
"Extraction Prompt": "Solicitação de extração",
"Schema Mode": "Modo de esquema",
"Data Definition": "Definição de dados",
"URLs": "Links",
"Enable Web Search": "Habilitar pesquisa na Web",
"Timeout (seconds)": "Tempo limite (segundos)",
"Data Schema Type": "Tipo de esquema de dados",
"URL": "URL:",
"Prompt": "Aviso",
"Limit": "Limitar",
"Only Main Content": "Conteúdo principal somente",
"Deliver Results to Webhook": "Entregar Resultados para Webhook",
"Webhook Properties": "Propriedades do Webhook",
"Crawl ID": "Rastel ID",
"Main Website URL": "URL principal do site",
"Include subdomain": "Incluir subdomínio",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"The webpage URL to scrape.": "A URL da página web para scrape.",
"Maximum time to wait for the page to load (in milliseconds).": "Tempo máximo de espera para carregar a página (em milissegundos)",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Ativar a execução de uma sequência de ações na página antes de saltar (como clicar nos botões, preencher formulários, etc.). Veja [Documentação do Firecrawl Acções](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) para detalhes sobre ações disponíveis e seus parâmetros.",
"Properties for actions that will be performed on the page.": "Propriedades para ações que serão executadas na página.",
"Choose what format you want your output in.": "Escolha em que formato você quer a sua saída.",
"Prompt for extracting data.": "Solicitar a extração de dados.",
"Data schema type.": "Tipo de esquema de dados.",
"Add one or more URLs to extract data from.": "Adicione uma ou mais URLs para extrair dados.",
"Describe what information you want to extract.": "Descreva quais informações você deseja extrair.",
"Enable web search to find additional context.": "Habilitar pesquisa web para encontrar contexto adicional.",
"Timeout in seconds after which the task will be cancelled": "Tempo limite em segundos após o qual a tarefa será cancelada",
"For complex schema, you can use advanced mode.": "Para esquemas complexos, você pode usar o modo avançado.",
"The base URL to start crawling from.": "A URL base para começar a rastrear.",
"Maximum number of pages to crawl. Default limit is 10.": "O número máximo de páginas a rastrear. O limite padrão é 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Devolve apenas o conteúdo principal da página, excluindo cabeçalhos, naves, rodapés, etc.",
"Enable to send crawl results to a webhook URL.": "Habilitar para enviar resultados de rastreamento para uma URL do webhook.",
"Properties for webhook configuration.": "Propriedades para configuração de webhook.",
"The ID of the crawl job to check.": "A identificação do trabalho de rastreamento para verificar.",
"The webpage URL to start scraping from.": "A URL da página web para começar a pular.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Incluir e arrastar páginas de subdomínios do site de destino (por exemplo, blog.example.com, shop.example.com) além do domínio principal.",
"Maximum number of links to return (max: 100,000)": "Número máximo de links a retornar (máx: 100.000)",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Simple": "Simples",
"Advanced": "Avançado",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA"
}

View File

@@ -0,0 +1,64 @@
{
"Firecrawl": "Огненный",
"Extract structured data from websites using AI with natural language prompts": "Извлечь структурированные данные с веб-сайтов с использованием ИИ с естественными языковыми подсказками",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "Сайт Scrape",
"Start Crawl": "Начать Crawl",
"Crawl Results": "Результаты Crawl",
"Custom API Call": "Пользовательский вызов API",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Скрипт веб-сайт, выполняя ряд действий, таких как клик, печатание, снятие скриншотов и извлечение данных.",
"Start crawling multiple pages from a website based on specified rules and patterns.": "Начните сканировать несколько страниц сайта на основе указанных правил и шаблонов.",
"Get the results of a crawl job.": "Получить результаты работы по ползунку.",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Website URL": "URL сайта",
"Timeout (ms)": "Таймаут (мс)",
"Perform Actions Before Scraping": "Выполнить действия перед Scraping",
"Action Properties": "Свойства действия",
"Extraction Type": "Тип извлечения",
"Extraction Properties": "Свойства извлечения",
"URL": "URL",
"Exclude Paths": "Исключить пути",
"Include Paths": "Включить пути",
"Maximum Path Depth": "Максимальная глубина пути",
"Maximum Discovery Depth": "Максимальная глубина обнаружения",
"Ignore Sitemap": "Ignore Sitemap",
"Ignore Query Parameters": "Игнорировать параметры запроса",
"Limit": "Лимит",
"Allow Backward Links": "Разрешить обратные ссылки",
"Allow External Links": "Разрешить внешние ссылки",
"Deliver Results to Webhook": "Доставить результаты для Webhook",
"Webhook Properties": "Свойства вебхука",
"Crawl ID": "ID Crawl",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"The webpage URL to scrape.": "URL веб-страницы для scrape.",
"Maximum time to wait for the page to load (in milliseconds).": "Максимальное время ожидания загрузки страницы (в миллисекундах).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Позволяет выполнять последовательность действий на странице перед тем как нажать кнопки, заполнять формы и т.д.). Подробнее о доступных действиях и их параметрах смотрите в [Документациях действий Firecrawl](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions).",
"Properties for actions that will be performed on the page.": "Свойства действий, которые будут выполняться на странице.",
"Choose how to extract data from the webpage.": "Выберите способ извлечения данных из веб-страницы.",
"Properties for data extraction from the webpage.": "Свойства для извлечения данных из веб-страницы.",
"The base URL to start crawling from.": "Базовый URL-адрес для начала сканирования.",
"URL pathname regex patterns that exclude matching URLs from the crawl. For example, if you set \"excludePaths\": [\"blog/.*\"] for the base URL firecrawl.dev, any results matching that pattern will be excluded, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.": "Шаблоны регулярного имени URL, которые исключают совпадающие URL-адреса из сканирования. Например, если вы установите \"excludePaths\": [\"blog/.*\"] для firecrawl по базовому URL. ev, любые результаты, соответствующие этому шаблону, будут исключены, например https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
"URL pathname regex patterns that include matching URLs in the crawl. Only the paths that match the specified patterns will be included in the response. For example, if you set \"includePaths\": [\"blog/.*\"] for the base URL firecrawl.dev, only results matching that pattern will be included, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.": "Шаблоны регулярного имени URL, включающие в ползунок соответствующие URL. В ответ будут включены только пути, соответствующие указанным шаблонам. Например, если вы установите \"includePaths\": [\"blog/. \"] для базового URL-адреса firecrawl.dev, только результаты, соответствующие этому шаблону, например https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
"Maximum depth to crawl relative to the base URL. Basically, the max number of slashes the pathname of a scraped URL may contain.": "Максимальная глубина сканирования относительно базового URL-адреса. По сути, максимальное количество слэша может содержать имя скращенного URL-адреса.",
"Maximum depth to crawl based on discovery order. The root site and sitemapped pages has a discovery depth of 0. For example, if you set it to 1, and you set ignoreSitemap, you will only crawl the entered URL and all URLs that are linked on that page.": "Максимальная глубина сканирования, основанная на ордерах по поиску. Корневой сайт и сгруппированные страницы имеют нулевую глубину. Например, если вы установите значение 1, и установите игнорирующую карту Sitemap, вы будете сканировать только введенный URL и все URL-адреса, которые связаны на этой странице.",
"Ignore the website sitemap when crawling": "Игнорировать карту сайта при сканировании",
"Do not re-scrape the same path with different (or none) query parameters": "Не удалять один и тот же путь с разными (или нет) параметрами запроса",
"Maximum number of pages to crawl. Default limit is 10000.": "Максимальное количество страниц для сканирования. По умолчанию это 10000.",
"Enables the crawler to navigate from a specific URL to previously linked pages.": "Позволяет сканирующему пользователю перемещаться по определенному URL на ранее ссылаемые страницы.",
"Allows the crawler to follow links to external websites.": "Разрешает сканирующему пользователю следовать по ссылкам на внешние сайты.",
"Enable to send crawl results to a webhook URL.": "Включите, чтобы отправлять результаты сканирования на URL вебхука.",
"Properties for webhook configuration.": "Свойства конфигурации webhook.",
"The ID of the crawl job to check.": "Идентификатор нужной работы для проверки.",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Extract structured data from websites using AI with natural language prompts",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "Scrape Website",
"Extract Structured Data": "Extract Structured Data",
"Crawl": "Crawl",
"Crawl Results": "Crawl Results",
"Map Websites": "Map Websites",
"Custom API Call": "Custom API Call",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.",
"Extract structured data from multiple URLs using AI.": "Extract structured data from multiple URLs using AI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Crawl multiple pages from a website based on specified rules and patterns.",
"Get the results of a crawl job.": "Get the results of a crawl job.",
"Input a website and get all the urls on the website.": "Input a website and get all the urls on the website.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Website URL": "Website URL",
"Timeout (ms)": "Timeout (ms)",
"Perform Actions Before Scraping": "Perform Actions Before Scraping",
"Action Properties": "Action Properties",
"Output Format": "Output Format",
"Extraction Prompt": "Extraction Prompt",
"Schema Mode": "Schema Mode",
"Data Definition": "Data Definition",
"URLs": "URLs",
"Enable Web Search": "Enable Web Search",
"Timeout (seconds)": "Timeout (seconds)",
"Data Schema Type": "Data Schema Type",
"URL": "URL",
"Prompt": "Prompt",
"Limit": "Limit",
"Only Main Content": "Only Main Content",
"Deliver Results to Webhook": "Deliver Results to Webhook",
"Webhook Properties": "Webhook Properties",
"Crawl ID": "Crawl ID",
"Main Website URL": "Main Website URL",
"Include subdomain": "Include subdomain",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The webpage URL to scrape.": "The webpage URL to scrape.",
"Maximum time to wait for the page to load (in milliseconds).": "Maximum time to wait for the page to load (in milliseconds).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.",
"Properties for actions that will be performed on the page.": "Properties for actions that will be performed on the page.",
"Choose what format you want your output in.": "Choose what format you want your output in.",
"Prompt for extracting data.": "Prompt for extracting data.",
"Data schema type.": "Data schema type.",
"Add one or more URLs to extract data from.": "Add one or more URLs to extract data from.",
"Describe what information you want to extract.": "Describe what information you want to extract.",
"Enable web search to find additional context.": "Enable web search to find additional context.",
"Timeout in seconds after which the task will be cancelled": "Timeout in seconds after which the task will be cancelled",
"For complex schema, you can use advanced mode.": "For complex schema, you can use advanced mode.",
"The base URL to start crawling from.": "The base URL to start crawling from.",
"Maximum number of pages to crawl. Default limit is 10.": "Maximum number of pages to crawl. Default limit is 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Only return the main content of the page, excluding headers, navs, footers, etc.",
"Enable to send crawl results to a webhook URL.": "Enable to send crawl results to a webhook URL.",
"Properties for webhook configuration.": "Properties for webhook configuration.",
"The ID of the crawl job to check.": "The ID of the crawl job to check.",
"The webpage URL to start scraping from.": "The webpage URL to start scraping from.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.",
"Maximum number of links to return (max: 100,000)": "Maximum number of links to return (max: 100,000)",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Simple": "Simple",
"Advanced": "Advanced",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,64 @@
{
"Firecrawl": "Firecrawl",
"Extract structured data from websites using AI with natural language prompts": "Extract structured data from websites using AI with natural language prompts",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "Scrape Website",
"Start Crawl": "Start Crawl",
"Crawl Results": "Crawl Results",
"Custom API Call": "Custom API Call",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.",
"Start crawling multiple pages from a website based on specified rules and patterns.": "Start crawling multiple pages from a website based on specified rules and patterns.",
"Get the results of a crawl job.": "Get the results of a crawl job.",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Website URL": "Website URL",
"Timeout (ms)": "Timeout (ms)",
"Perform Actions Before Scraping": "Perform Actions Before Scraping",
"Action Properties": "Action Properties",
"Extraction Type": "Extraction Type",
"Extraction Properties": "Extraction Properties",
"URL": "URL",
"Exclude Paths": "Exclude Paths",
"Include Paths": "Include Paths",
"Maximum Path Depth": "Maximum Path Depth",
"Maximum Discovery Depth": "Maximum Discovery Depth",
"Ignore Sitemap": "Ignore Sitemap",
"Ignore Query Parameters": "Ignore Query Parameters",
"Limit": "Limit",
"Allow Backward Links": "Allow Backward Links",
"Allow External Links": "Allow External Links",
"Deliver Results to Webhook": "Deliver Results to Webhook",
"Webhook Properties": "Webhook Properties",
"Crawl ID": "Crawl ID",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The webpage URL to scrape.": "The webpage URL to scrape.",
"Maximum time to wait for the page to load (in milliseconds).": "Maximum time to wait for the page to load (in milliseconds).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.",
"Properties for actions that will be performed on the page.": "Properties for actions that will be performed on the page.",
"Choose how to extract data from the webpage.": "Choose how to extract data from the webpage.",
"Properties for data extraction from the webpage.": "Properties for data extraction from the webpage.",
"The base URL to start crawling from.": "The base URL to start crawling from.",
"URL pathname regex patterns that exclude matching URLs from the crawl. For example, if you set \"excludePaths\": [\"blog/.*\"] for the base URL firecrawl.dev, any results matching that pattern will be excluded, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.": "URL pathname regex patterns that exclude matching URLs from the crawl. For example, if you set \"excludePaths\": [\"blog/.*\"] for the base URL firecrawl.dev, any results matching that pattern will be excluded, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
"URL pathname regex patterns that include matching URLs in the crawl. Only the paths that match the specified patterns will be included in the response. For example, if you set \"includePaths\": [\"blog/.*\"] for the base URL firecrawl.dev, only results matching that pattern will be included, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.": "URL pathname regex patterns that include matching URLs in the crawl. Only the paths that match the specified patterns will be included in the response. For example, if you set \"includePaths\": [\"blog/.*\"] for the base URL firecrawl.dev, only results matching that pattern will be included, such as https://www.firecrawl.dev/blog/firecrawl-launch-week-1-recap.",
"Maximum depth to crawl relative to the base URL. Basically, the max number of slashes the pathname of a scraped URL may contain.": "Maximum depth to crawl relative to the base URL. Basically, the max number of slashes the pathname of a scraped URL may contain.",
"Maximum depth to crawl based on discovery order. The root site and sitemapped pages has a discovery depth of 0. For example, if you set it to 1, and you set ignoreSitemap, you will only crawl the entered URL and all URLs that are linked on that page.": "Maximum depth to crawl based on discovery order. The root site and sitemapped pages has a discovery depth of 0. For example, if you set it to 1, and you set ignoreSitemap, you will only crawl the entered URL and all URLs that are linked on that page.",
"Ignore the website sitemap when crawling": "Ignore the website sitemap when crawling",
"Do not re-scrape the same path with different (or none) query parameters": "Do not re-scrape the same path with different (or none) query parameters",
"Maximum number of pages to crawl. Default limit is 10000.": "Maximum number of pages to crawl. Default limit is 10000.",
"Enables the crawler to navigate from a specific URL to previously linked pages.": "Enables the crawler to navigate from a specific URL to previously linked pages.",
"Allows the crawler to follow links to external websites.": "Allows the crawler to follow links to external websites.",
"Enable to send crawl results to a webhook URL.": "Enable to send crawl results to a webhook URL.",
"Properties for webhook configuration.": "Properties for webhook configuration.",
"The ID of the crawl job to check.": "The ID of the crawl job to check.",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,75 @@
{
"Extract structured data from websites using AI with natural language prompts": "Extract structured data from websites using AI with natural language prompts",
"\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n": "\nFollow these steps to obtain your Firecrawl API Key:\n\n1. Visit [Firecrawl](https://firecrawl.dev) and create an account.\n2. Log in and navigate to your dashboard.\n3. Locate and copy your API key from the API settings section.\n",
"Scrape Website": "Scrape Website",
"Extract Structured Data": "Extract Structured Data",
"Crawl": "Crawl",
"Crawl Results": "Crawl Results",
"Map Websites": "Map Websites",
"Custom API Call": "自定义 API 呼叫",
"Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.": "Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.",
"Extract structured data from multiple URLs using AI.": "Extract structured data from multiple URLs using AI.",
"Crawl multiple pages from a website based on specified rules and patterns.": "Crawl multiple pages from a website based on specified rules and patterns.",
"Get the results of a crawl job.": "Get the results of a crawl job.",
"Input a website and get all the urls on the website.": "Input a website and get all the urls on the website.",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Website URL": "Website URL",
"Timeout (ms)": "Timeout (ms)",
"Perform Actions Before Scraping": "Perform Actions Before Scraping",
"Action Properties": "Action Properties",
"Output Format": "Output Format",
"Extraction Prompt": "Extraction Prompt",
"Schema Mode": "Schema Mode",
"Data Definition": "Data Definition",
"URLs": "URLs",
"Enable Web Search": "Enable Web Search",
"Timeout (seconds)": "Timeout (seconds)",
"Data Schema Type": "Data Schema Type",
"URL": "URL",
"Prompt": "Prompt",
"Limit": "Limit",
"Only Main Content": "Only Main Content",
"Deliver Results to Webhook": "Deliver Results to Webhook",
"Webhook Properties": "Webhook Properties",
"Crawl ID": "Crawl ID",
"Main Website URL": "Main Website URL",
"Include subdomain": "Include subdomain",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"The webpage URL to scrape.": "The webpage URL to scrape.",
"Maximum time to wait for the page to load (in milliseconds).": "Maximum time to wait for the page to load (in milliseconds).",
"Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.": "Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.",
"Properties for actions that will be performed on the page.": "Properties for actions that will be performed on the page.",
"Choose what format you want your output in.": "Choose what format you want your output in.",
"Prompt for extracting data.": "Prompt for extracting data.",
"Data schema type.": "Data schema type.",
"Add one or more URLs to extract data from.": "Add one or more URLs to extract data from.",
"Describe what information you want to extract.": "Describe what information you want to extract.",
"Enable web search to find additional context.": "Enable web search to find additional context.",
"Timeout in seconds after which the task will be cancelled": "Timeout in seconds after which the task will be cancelled",
"For complex schema, you can use advanced mode.": "For complex schema, you can use advanced mode.",
"The base URL to start crawling from.": "The base URL to start crawling from.",
"Maximum number of pages to crawl. Default limit is 10.": "Maximum number of pages to crawl. Default limit is 10.",
"Only return the main content of the page, excluding headers, navs, footers, etc.": "Only return the main content of the page, excluding headers, navs, footers, etc.",
"Enable to send crawl results to a webhook URL.": "Enable to send crawl results to a webhook URL.",
"Properties for webhook configuration.": "Properties for webhook configuration.",
"The ID of the crawl job to check.": "The ID of the crawl job to check.",
"The webpage URL to start scraping from.": "The webpage URL to start scraping from.",
"Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.": "Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.",
"Maximum number of links to return (max: 100,000)": "Maximum number of links to return (max: 100,000)",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Simple": "Simple",
"Advanced": "Advanced",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色"
}

View File

@@ -0,0 +1,76 @@
import { createCustomApiCallAction, httpClient, HttpMethod } from '@activepieces/pieces-common';
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { scrape } from './lib/actions/scrape';
import { extract } from './lib/actions/extract';
import { crawl } from './lib/actions/crawl';
import { crawlResults } from './lib/actions/crawl-results';
import { map } from './lib/actions/map';
import { FIRECRAWL_API_BASE_URL } from './lib/common/common';
const markdownDescription = `
Follow these steps to obtain your Firecrawl API Key:
1. Visit [Firecrawl](https://firecrawl.dev) and create an account.
2. Log in and navigate to your dashboard.
3. Locate and copy your API key from the API settings section.
`;
export const firecrawlAuth = PieceAuth.SecretText({
description: markdownDescription,
displayName: 'API Key',
required: true,
validate: async ({ auth }) => {
try {
await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${FIRECRAWL_API_BASE_URL}/scrape`,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${auth}`,
},
body: {
url: 'https://www.example.com',
formats: ['json'],
jsonOptions: {
prompt: 'test'
}
},
});
return {
valid: true,
};
} catch (e) {
return {
valid: false,
error: 'Invalid API Key',
};
}
},
});
export const firecrawl = createPiece({
displayName: 'Firecrawl',
description: 'Extract structured data from websites using AI with natural language prompts',
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/firecrawl.png',
categories: [PieceCategory.ARTIFICIAL_INTELLIGENCE],
authors: ["geekyme-fsmk", "geekyme", "arinmakk"],
auth: firecrawlAuth,
actions: [
scrape,
extract,
crawl,
crawlResults,
map,
createCustomApiCallAction({
baseUrl: () => FIRECRAWL_API_BASE_URL,
auth: firecrawlAuth,
authMapping: async (auth) => ({
'Authorization': `Bearer ${auth.secret_text}`,
}),
}),
],
triggers: [],
});

View File

@@ -0,0 +1,28 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { firecrawlAuth } from '../../index';
export const crawlResults = createAction({
auth: firecrawlAuth,
name: 'crawlResults',
displayName: 'Crawl Results',
description: 'Get the results of a crawl job.',
props: {
crawlId: Property.ShortText({
displayName: 'Crawl ID',
description: 'The ID of the crawl job to check.',
required: true,
}),
},
async run({ auth, propsValue }) {
const response = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `https://api.firecrawl.dev/v1/crawl/${propsValue.crawlId}`,
headers: {
'Authorization': `Bearer ${auth.secret_text}`,
},
});
return response.body;
},
});

View File

@@ -0,0 +1,318 @@
import { createAction, Property, DynamicPropsValue, InputPropertyMap } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { firecrawlAuth } from '../../index';
import { forScreenshotOutputFormat, forSimpleOutputFormat, forJsonOutputFormat, polling, downloadAndSaveCrawlScreenshots, FIRECRAWL_API_BASE_URL } from '../common/common';
function webhookConfig(useWebhook: boolean, webhookProperties: any): any {
if (!useWebhook || !webhookProperties) {
return null;
}
const webhookUrl = webhookProperties['webhookUrl'];
if (!webhookUrl) {
return null;
}
const webhook: Record<string, any> = {
url: webhookUrl,
};
if (webhookProperties['webhookHeaders']) {
webhook['headers'] = webhookProperties['webhookHeaders'];
}
if (webhookProperties['webhookMetadata']) {
webhook['metadata'] = webhookProperties['webhookMetadata'];
}
if (webhookProperties['webhookEvents'] && Array.isArray(webhookProperties['webhookEvents']) && webhookProperties['webhookEvents'].length > 0) {
webhook['events'] = webhookProperties['webhookEvents'];
}
return webhook;
}
export const crawl = createAction({
auth: firecrawlAuth,
name: 'crawl',
displayName: 'Crawl',
description: 'Crawl multiple pages from a website based on specified rules and patterns.',
props: {
url: Property.ShortText({
displayName: 'URL',
description: 'The base URL to start crawling from.',
required: true,
}),
prompt: Property.LongText({
displayName: 'Prompt',
description: 'Describe what information you want to extract.',
required: false,
defaultValue: 'Get me all of the blog pages on the website, probably localed in /blog'
}),
limit: Property.Number({
displayName: 'Limit',
description: 'Maximum number of pages to crawl. Default limit is 10.',
required: false,
defaultValue: 10,
}),
formats: Property.Dropdown({
auth: firecrawlAuth,
displayName: 'Output Format',
description: 'Choose what format you want your output in.',
required: true,
refreshers: [],
options: async () => {
return {
options: [
{ label: 'Markdown', value: 'markdown' },
{ label: 'Summary', value: 'summary' },
{ label: 'Links', value: 'links' },
{ label: 'HTML', value: 'html' },
{ label: 'Screenshot', value: 'screenshot' },
{ label: 'JSON', value: 'json' },
]
};
},
defaultValue: 'markdown',
}),
onlyMainContent: Property.Checkbox({
displayName: 'Only Main Content',
description: 'Only return the main content of the page, excluding headers, navs, footers, etc.',
required: false,
defaultValue: false,
}),
extractMode: Property.DynamicProperties({
auth: firecrawlAuth,
displayName: 'Schema Mode',
description: 'Data schema type.',
required: false,
refreshers: ['formats'],
props: async (propsValue): Promise<InputPropertyMap> => {
const format = propsValue['formats'] as unknown as string;
if (format !== 'json') {
return {};
}
const map: InputPropertyMap= {
mode: Property.StaticDropdown<'simple' | 'advanced'>({
displayName: 'Data Schema Type',
description: 'For complex schema, you can use advanced mode.',
required: true,
defaultValue: 'simple',
options: {
disabled: false,
options: [
{ label: 'Simple', value: 'simple' },
{ label: 'Advanced', value: 'advanced' },
],
},
}),
};
return map;
},
}),
extractSchema: Property.DynamicProperties({
auth: firecrawlAuth,
displayName: 'Data Definition',
required: false,
refreshers: ['formats', 'extractMode'],
props: async (propsValue): Promise<InputPropertyMap> => {
const mode = (propsValue['extractMode'] as unknown as { mode: 'simple' | 'advanced' })?.mode;
const format = propsValue['formats'] as unknown as string;
if (format !== 'json') {
return {};
}
if (mode === 'advanced') {
return {
fields: Property.Json({
displayName: 'JSON Schema',
description:
'Learn more about JSON Schema here: https://json-schema.org/learn/getting-started-step-by-step',
required: true,
defaultValue: {
type: 'object',
properties: {
name: {
type: 'string',
},
age: {
type: 'number',
},
},
required: ['name'],
},
}),
};
}
return {
fields: Property.Array({
displayName: 'Data Definition',
required: true,
properties: {
name: Property.ShortText({
displayName: 'Name',
description:
'Provide the name of the value you want to extract from the unstructured text. The name should be unique and short. ',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description:
'Brief description of the data, this hints for the AI on what to look for',
required: false,
}),
type: Property.StaticDropdown({
displayName: 'Data Type',
description: 'Type of parameter.',
required: true,
defaultValue: 'string',
options: {
disabled: false,
options: [
{ label: 'Text', value: 'string' },
{ label: 'Number', value: 'number' },
{ label: 'Boolean', value: 'boolean' },
],
},
}),
isRequired: Property.Checkbox({
displayName: 'Fail if Not present?',
required: true,
defaultValue: false,
}),
},
}),
};
},
}),
timeout: Property.Number({
displayName: 'Timeout (seconds)',
description: 'Timeout in seconds after which the task will be cancelled',
required: false,
defaultValue: 300,
}),
useWebhook: Property.Checkbox({
displayName: 'Deliver Results to Webhook',
description: 'Enable to send crawl results to a webhook URL.',
required: false,
defaultValue: false,
}),
webhookProperties: Property.DynamicProperties({
displayName: 'Webhook Properties',
description: 'Properties for webhook configuration.',
required: false,
refreshers: ['useWebhook'],
auth: firecrawlAuth,
props: async (propsValue): Promise<InputPropertyMap> => {
const useWebhook = propsValue['useWebhook'] as unknown as boolean;
if (!useWebhook) {
return {};
}
const map: InputPropertyMap = {
webhookUrl: Property.ShortText({
displayName: 'Webhook URL',
description: 'The URL to send the webhook to. This will trigger for crawl started (crawl.started), every page crawled (crawl.page) and when the crawl is completed (crawl.completed or crawl.failed).',
required: true,
}),
webhookHeaders: Property.Json({
displayName: 'Webhook Headers',
description: 'Headers to send to the webhook URL.',
required: false,
defaultValue: {},
}),
webhookMetadata: Property.Json({
displayName: 'Webhook Metadata',
description: 'Custom metadata that will be included in all webhook payloads for this crawl.',
required: false,
defaultValue: {},
}),
webhookEvents: Property.Array({
displayName: 'Webhook Events',
description: 'Type of events that should be sent to the webhook URL. (default: all)',
required: false,
defaultValue: ['completed', 'page', 'failed', 'started'],
}),
};
return map;
},
}),
},
async run(context) {
const { auth, propsValue } = context;
const body: Record<string, any> = {
url: propsValue.url,
sitemap: "include",
crawlEntireDomain: false,
maxDiscoveryDepth: 10,
};
if (propsValue.limit !== undefined) {
body['limit'] = propsValue.limit;
}
if (propsValue.prompt !== undefined) {
body['prompt'] = propsValue.prompt
}
const scrapeOptions: Record<string, any> = {};
const format = propsValue.formats as string;
if (format === 'screenshot') {
scrapeOptions['formats'] = [forScreenshotOutputFormat()];
} else if (format === 'json') {
const extractConfig = {
mode: propsValue.extractMode?.['mode'],
schema: propsValue.extractSchema
};
const jsonFormat = forJsonOutputFormat(extractConfig);
scrapeOptions['formats'] = [{
type: 'json',
schema: jsonFormat.schema
}];
} else {
scrapeOptions['formats'] = [forSimpleOutputFormat(format)];
}
if (propsValue.onlyMainContent !== undefined) {
scrapeOptions['onlyMainContent'] = propsValue.onlyMainContent;
}
scrapeOptions['maxAge'] = 172800000;
if (Object.keys(scrapeOptions).length > 0) {
body['scrapeOptions'] = scrapeOptions;
}
const webhook = webhookConfig(propsValue.useWebhook || false, propsValue.webhookProperties);
if (webhook) {
body['webhook'] = webhook;
}
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${FIRECRAWL_API_BASE_URL}/crawl`,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${auth}`,
},
body: body,
});
const jobId = response.body.id;
// polling
const timeoutSeconds = propsValue.timeout || 300;
const result = await polling(jobId, auth.secret_text, timeoutSeconds, 'crawl');
if (propsValue.formats === 'screenshot') {
await downloadAndSaveCrawlScreenshots(result, context);
}
return result;
},
});

View File

@@ -0,0 +1,167 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod, pollingHelper } from '@activepieces/pieces-common';
import { firecrawlAuth } from '../../index';
import { forJsonOutputFormat, polling, FIRECRAWL_API_BASE_URL } from '../common/common';
export const extract = createAction({
auth: firecrawlAuth,
name: 'extract',
displayName: 'Extract Structured Data',
description: 'Extract structured data from multiple URLs using AI.',
props: {
urls: Property.Array({
displayName: 'URLs',
description: 'Add one or more URLs to extract data from.',
required: true,
properties: {
url: Property.ShortText({
displayName: 'URL',
description: 'Website URL to extract data from',
required: true,
})
}
}),
prompt: Property.LongText({
displayName: 'Extraction Prompt',
description: 'Describe what information you want to extract.',
required: false,
defaultValue: 'Extract the following data from the provided content.',
}),
enableWebSearch: Property.Checkbox({
displayName: 'Enable Web Search',
description: 'Enable web search to find additional context.',
required: false,
defaultValue: false,
}),
timeout: Property.Number({
displayName: 'Timeout (seconds)',
description: 'Timeout in seconds after which the task will be cancelled',
required: false,
defaultValue: 300,
}),
mode: Property.StaticDropdown<'simple' | 'advanced'>({
displayName: 'Data Schema Type',
description: 'For complex schema, you can use advanced mode.',
required: true,
defaultValue: 'simple',
options: {
disabled: false,
options: [
{ label: 'Simple', value: 'simple' },
{ label: 'Advanced', value: 'advanced' },
],
},
}),
schema: Property.DynamicProperties({
displayName: 'Data Definition',
auth: firecrawlAuth,
required: true,
refreshers: ['mode'],
props: async (propsValue) => {
const mode = propsValue['mode'] as unknown as 'simple' | 'advanced';
if (mode === 'advanced') {
return {
fields: Property.Json({
displayName: 'JSON Schema',
description:
'Learn more about JSON Schema here: https://json-schema.org/learn/getting-started-step-by-step',
required: true,
defaultValue: {
type: 'object',
properties: {
name: {
type: 'string',
},
age: {
type: 'number',
},
},
required: ['name'],
},
}),
};
}
return {
fields: Property.Array({
displayName: 'Data Definition',
required: true,
properties: {
name: Property.ShortText({
displayName: 'Name',
description:
'Provide the name of the value you want to extract from the unstructured text. The name should be unique and short. ',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description:
'Brief description of the data, this hints for the AI on what to look for',
required: false,
}),
type: Property.StaticDropdown({
displayName: 'Data Type',
description: 'Type of parameter.',
required: true,
defaultValue: 'string',
options: {
disabled: false,
options: [
{ label: 'Text', value: 'string' },
{ label: 'Number', value: 'number' },
{ label: 'Boolean', value: 'boolean' },
],
},
}),
isRequired: Property.Checkbox({
displayName: 'Fail if Not present?',
required: true,
defaultValue: false,
}),
},
}),
};
},
}),
},
async run( context ) {
const { auth, propsValue } = context;
const urlObjects = propsValue.urls as Array<{ url: string }>;
const urlsArray = urlObjects.map(item => item.url);
const extractConfig = {
prompt: propsValue.prompt,
mode: propsValue.mode,
schema: propsValue.schema
};
const jsonFormat = forJsonOutputFormat(extractConfig);
const body: Record<string, any> = {
urls: urlsArray,
prompt: jsonFormat.prompt,
schema: jsonFormat.schema,
};
if (propsValue.enableWebSearch) {
body['enableWebSearch'] = true;
}
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${FIRECRAWL_API_BASE_URL}/extract`,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${auth}`,
},
body: body,
});
const jobId = response.body.id;
// polling
const timeoutSeconds = propsValue.timeout || 300;
const result = await polling(jobId, auth.secret_text, timeoutSeconds, 'extract')
return result;
},
});

View File

@@ -0,0 +1,52 @@
import { createAction, Property, DynamicPropsValue, InputPropertyMap } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { firecrawlAuth } from '../../index';
import { FIRECRAWL_API_BASE_URL } from '../common/common';
export const map = createAction({
auth: firecrawlAuth,
name: 'map',
displayName: 'Map Websites',
description: 'Input a website and get all the urls on the website.' ,
props: {
url: Property.ShortText({
displayName: 'Main Website URL',
description: 'The webpage URL to start scraping from.',
required: true,
}),
subdomain: Property.Checkbox({
displayName: 'Include subdomain',
description: 'Include and crawl pages from subdomains of the target website (e.g., blog.example.com, shop.example.com) in addition to the main domain.',
required: false,
defaultValue: false
}),
limit: Property.Number({
displayName: 'Limit',
description: 'Maximum number of links to return (max: 100,000)',
required: false,
defaultValue: 5000,
}),
},
async run(context) {
const { auth, propsValue } = context;
const body: Record<string, any> = {
url: propsValue.url,
sitemap: 'include',
includeSubdomains: propsValue.subdomain,
limit: propsValue.limit,
};
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${FIRECRAWL_API_BASE_URL}/map`,
headers: {
'Authorization': `Bearer ${auth.secret_text}`,
'Content-Type': 'application/json'
},
body: body,
});
return response.body;
}
})

View File

@@ -0,0 +1,294 @@
import { createAction, Property, DynamicPropsValue, InputPropertyMap } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { firecrawlAuth } from '../../index';
import { forScreenshotOutputFormat, forSimpleOutputFormat, downloadAndSaveScreenshot, forJsonOutputFormat, FIRECRAWL_API_BASE_URL } from '../common/common';
function forDefaultScreenshot(): any {
return {
type: 'screenshot',
fullPage: true,
};
}
export const scrape = createAction({
auth: firecrawlAuth,
name: 'scrape',
displayName: 'Scrape Website',
description: 'Scrape a website by performing a series of actions like clicking, typing, taking screenshots, and extracting data.',
props: {
url: Property.ShortText({
displayName: 'Website URL',
description: 'The webpage URL to scrape.',
required: true,
}),
timeout: Property.Number({
displayName: 'Timeout (ms)',
description: 'Maximum time to wait for the page to load (in milliseconds).',
required: false,
defaultValue: 60000,
}),
useActions: Property.Checkbox({
displayName: 'Perform Actions Before Scraping',
description: 'Enable to perform a sequence of actions on the page before scraping (like clicking buttons, filling forms, etc.). See [Firecrawl Actions Documentation](https://docs.firecrawl.dev/api-reference/endpoint/scrape#body-actions) for details on available actions and their parameters.',
required: false,
defaultValue: false,
}),
actionProperties: Property.DynamicProperties({
displayName: 'Action Properties',
description: 'Properties for actions that will be performed on the page.',
required: false,
refreshers: ['useActions'],
auth: firecrawlAuth,
props: async (propsValue): Promise<InputPropertyMap> => {
const useActions = propsValue['useActions'] as unknown as boolean;
if (!useActions) {
return {};
}
return {
actions: Property.Json({
displayName: 'Actions',
description: 'Sequence of actions to perform on the page.',
required: false,
defaultValue: [
{
type: 'wait',
selector: '#example'
},
{
type: 'write',
selector: '#input',
text: 'Hello World',
},
{
type: 'click',
selector: '#button',
},
{
type: 'screenshot',
},
],
}),
};
},
}),
formats: Property.Dropdown({
auth: firecrawlAuth,
displayName: 'Output Format',
description: 'Choose what format you want your output in.',
required: true,
refreshers: [],
options: async () => {
return {
options: [
{ label: 'Markdown', value: 'markdown' },
{ label: 'Summary', value: 'summary' },
{ label: 'HTML', value: 'html' },
{ label: 'Raw HTML', value: 'rawHtml' },
{ label: 'Links', value: 'links' },
{ label: 'Images', value: 'images' },
{ label: 'Screenshot', value: 'screenshot' },
{ label: 'JSON', value: 'json' }
]
};
},
defaultValue: 'markdown',
}),
extractPrompt: Property.DynamicProperties({
displayName: 'Extraction Prompt',
description: 'Prompt for extracting data.',
required: false,
refreshers: ['formats'],
auth: firecrawlAuth,
props: async (propsValue): Promise<InputPropertyMap> => {
const format = propsValue['formats'] as unknown as string;
if (format !== 'json') {
return {};
}
const map: InputPropertyMap = {
prompt: Property.LongText({
displayName: 'Extraction Prompt',
description: 'Describe what information you want to extract.',
required: false,
defaultValue: 'Extract the following data from the provided text.',
}),
};
return map;
},
}),
extractMode: Property.DynamicProperties({
displayName: 'Schema Mode',
description: 'Data schema type.',
required: false,
refreshers: ['formats'],
auth: firecrawlAuth,
props: async (propsValue): Promise<InputPropertyMap> => {
const format = propsValue['formats'] as unknown as string;
if (format !== 'json') {
return {};
}
return {
mode: Property.StaticDropdown<'simple' | 'advanced'>({
displayName: 'Data Schema Type',
description: 'For complex schema, you can use advanced mode.',
required: true,
defaultValue: 'simple',
options: {
disabled: false,
options: [
{ label: 'Simple', value: 'simple' },
{ label: 'Advanced', value: 'advanced' },
],
},
}),
};
},
}),
extractSchema: Property.DynamicProperties({
displayName: 'Data Definition',
required: false,
refreshers: ['formats', 'extractMode'],
auth: firecrawlAuth,
props: async (propsValue): Promise<InputPropertyMap> => {
const mode = (propsValue['extractMode'] as unknown as { mode: 'simple' | 'advanced' })?.mode;
const format = propsValue['formats'] as unknown as string;
if (format !== 'json') {
return {};
}
if (mode === 'advanced') {
return {
fields: Property.Json({
displayName: 'JSON Schema',
description:
'Learn more about JSON Schema here: https://json-schema.org/learn/getting-started-step-by-step',
required: true,
defaultValue: {
type: 'object',
properties: {
name: {
type: 'string',
},
age: {
type: 'number',
},
},
required: ['name'],
},
}),
};
}
return {
fields: Property.Array({
displayName: 'Data Definition',
required: true,
properties: {
name: Property.ShortText({
displayName: 'Name',
description:
'Provide the name of the value you want to extract from the unstructured text. The name should be unique and short. ',
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description:
'Brief description of the data, this hints for the AI on what to look for',
required: false,
}),
type: Property.StaticDropdown({
displayName: 'Data Type',
description: 'Type of parameter.',
required: true,
defaultValue: 'string',
options: {
disabled: false,
options: [
{ label: 'Text', value: 'string' },
{ label: 'Number', value: 'number' },
{ label: 'Boolean', value: 'boolean' },
],
},
}),
isRequired: Property.Checkbox({
displayName: 'Fail if Not present?',
required: true,
defaultValue: false,
}),
},
}),
};
},
}),
},
async run(context) {
const { auth, propsValue } = context;
const body: Record<string, any> = {
url: propsValue.url,
timeout: propsValue.timeout,
};
if (propsValue.useActions && propsValue.actionProperties && propsValue.actionProperties['actions']) {
body['actions'] = propsValue.actionProperties['actions'] || [];
}
const format = propsValue.formats as string;
const formatsArray: any[] = [];
// user selection
if (format === 'screenshot') {
const screenshotFormat = forScreenshotOutputFormat();
formatsArray.push(screenshotFormat);
} else if (format === 'json') {
const extractConfig = {
prompt: propsValue.extractPrompt?.['prompt'],
mode: propsValue.extractMode?.['mode'],
schema: propsValue.extractSchema
};
const jsonFormat = forJsonOutputFormat(extractConfig);
formatsArray.push({
type: 'json',
prompt: jsonFormat.prompt,
schema: jsonFormat.schema
});
} else {
const simpleFormat = forSimpleOutputFormat(format);
formatsArray.push(simpleFormat);
}
if (format !== 'screenshot') {
const defaultScreenshot = forDefaultScreenshot();
formatsArray.push(defaultScreenshot);
}
body['formats'] = formatsArray;
const response = await httpClient.sendRequest({
method: HttpMethod.POST,
url: `${FIRECRAWL_API_BASE_URL}/scrape`,
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${auth}`,
},
body: body,
});
const result = response.body;
await downloadAndSaveScreenshot(result.data, context);
// reorder the data object to put screenshot first, then user's selected format only
result.data = {
screenshot: result.data.screenshot,
[format]: result.data[format],
metadata: result.data.metadata
};
return result;
},
});

View File

@@ -0,0 +1,160 @@
import {
httpClient,
HttpMethod,
} from '@activepieces/pieces-common';
import Ajv from 'ajv';
import { randomUUID } from 'crypto';
export const FIRECRAWL_API_BASE_URL = 'https://api.firecrawl.dev/v2';
export const POLLING_INTERVAL = 5000;
export const forScreenshotOutputFormat = (): any => {
return {
type: 'screenshot',
fullPage: true
};
}
export const forSimpleOutputFormat = (format: string): string => {
return format;
}
// Download and save screenshot(s) - works for both single scrape and crawl results
export async function downloadAndSaveScreenshot(screenshotTarget: any, context: any): Promise<void> {
const screenshotUrl = screenshotTarget.screenshot;
const response = await httpClient.sendRequest({
method: HttpMethod.GET,
url: screenshotUrl,
responseType: 'arraybuffer'
});
const fileName = `screenshot-${randomUUID()}.png`;
const fileUrl = await context.files.write({
fileName: fileName,
data: Buffer.from(response.body),
});
screenshotTarget.screenshot = {
fileName: fileName,
fileUrl: fileUrl,
};
}
export async function downloadAndSaveCrawlScreenshots(crawlResult: any, context: any): Promise<void> {
if (!crawlResult.data || !Array.isArray(crawlResult.data)) {
return;
}
for (const data of crawlResult.data) {
if (data.screenshot) {
try {
await downloadAndSaveScreenshot(data, context);
} catch (error) {
console.error(`Failed to download screenshot for page: ${error}`);
}
}
}
}
// scrape, extract and crawl uses this function
export function forJsonOutputFormat(jsonExtractionConfig: any): any {
if (!jsonExtractionConfig['schema']){
throw new Error('schema is required.')
}
// follow logic from utility ai- extract structured data
let schemaDefinition: any;
if (jsonExtractionConfig['mode'] === 'advanced'){
const ajv = new Ajv();
const schema = jsonExtractionConfig['schema']['fields'];
const isValidSchema = ajv.validateSchema(schema);
if (!isValidSchema) {
throw new Error(
JSON.stringify({
message: 'Invalid JSON schema',
errors: ajv.errors,
}),
);
}
schemaDefinition = schema;
} else {
const fields = jsonExtractionConfig['schema']['fields'] as Array<{
name: string,
description?: string;
type: string;
isRequired: boolean;
}>;
const properties: Record<string, unknown> = {};
const required: string[] =[];
fields.forEach((field) => {
if (!/^[a-zA-Z0-9_.-]+$/.test(field.name)) {
throw new Error(`Invalid field name: ${field.name}. Field names can only contain letters, numbers, underscores, dots and hyphens.`);
}
properties[field.name] = {
type: field.type,
description: field.description,
};
if (field.isRequired) {
required.push(field.name);
}
});
schemaDefinition = {
type: 'object' as const,
properties,
required,
};
}
const result: any = {
schema: schemaDefinition,
};
// include prompt if it's provided (applicable for scrape/extract, not for crawl)
if (jsonExtractionConfig['prompt']) {
result.prompt = jsonExtractionConfig['prompt'];
}
return result;
}
// extract and scrape uses this function
export async function polling(
jobId: string,
auth: string,
timeoutSeconds: number,
actionType: 'extract' | 'crawl'
): Promise<any> {
const maxAttempts = timeoutSeconds / 5;
for (let attempt = 1; attempt <= maxAttempts ; attempt++) {
await new Promise(resolve => setTimeout(resolve, POLLING_INTERVAL));
const statusResponse = await httpClient.sendRequest({
method: HttpMethod.GET,
url: `${FIRECRAWL_API_BASE_URL}/${actionType}/${jobId}`,
headers: {
'Authorization': `Bearer ${auth}`,
},
});
const jobStatus = statusResponse.body.status;
if (jobStatus === 'completed') {
return statusResponse.body;
} else if (jobStatus === 'failed') {
throw new Error(`${actionType.charAt(0).toUpperCase()}. job failed: ${JSON.stringify(statusResponse.body)}`);
}
}
// exit loop time out
throw new Error(`${actionType.charAt(0).toUpperCase()}. job timed out after ${timeoutSeconds} second(s)`);
}

View File

@@ -0,0 +1,19 @@
{
"extends": "../../../../tsconfig.base.json",
"compilerOptions": {
"module": "commonjs",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"noPropertyAccessFromIndexSignature": true
},
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
]
}

View File

@@ -0,0 +1,11 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"module": "commonjs",
"outDir": "../../../../dist/out-tsc",
"declaration": true,
"types": ["node"]
},
"exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"],
"include": ["src/**/*.ts"]
}