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:
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"extends": ["../../../../.eslintrc.json"],
|
||||
"ignorePatterns": ["!**/*"],
|
||||
"overrides": [
|
||||
{
|
||||
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.ts", "*.tsx"],
|
||||
"rules": {}
|
||||
},
|
||||
{
|
||||
"files": ["*.js", "*.jsx"],
|
||||
"rules": {}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
# pieces-airtop
|
||||
|
||||
This library was generated with [Nx](https://nx.dev).
|
||||
|
||||
## Building
|
||||
|
||||
Run `nx build pieces-airtop` to build the library.
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "@activepieces/piece-airtop",
|
||||
"version": "0.0.7",
|
||||
"type": "commonjs",
|
||||
"main": "./src/index.js",
|
||||
"types": "./src/index.d.ts",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"name": "pieces-airtop",
|
||||
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
|
||||
"sourceRoot": "packages/pieces/community/airtop/src",
|
||||
"projectType": "library",
|
||||
"release": {
|
||||
"version": {
|
||||
"manifestRootsToUpdate": [
|
||||
"dist/{projectRoot}"
|
||||
],
|
||||
"currentVersionResolver": "git-tag",
|
||||
"fallbackCurrentVersionResolver": "disk"
|
||||
}
|
||||
},
|
||||
"tags": [],
|
||||
"targets": {
|
||||
"build": {
|
||||
"executor": "@nx/js:tsc",
|
||||
"outputs": [
|
||||
"{options.outputPath}"
|
||||
],
|
||||
"options": {
|
||||
"outputPath": "dist/packages/pieces/community/airtop",
|
||||
"tsConfig": "packages/pieces/community/airtop/tsconfig.lib.json",
|
||||
"packageJson": "packages/pieces/community/airtop/package.json",
|
||||
"main": "packages/pieces/community/airtop/src/index.ts",
|
||||
"assets": [
|
||||
"packages/pieces/community/airtop/*.md",
|
||||
{
|
||||
"input": "packages/pieces/community/airtop/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/airtop",
|
||||
"command": "bun install --no-save --silent"
|
||||
},
|
||||
"dependsOn": [
|
||||
"^build"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tGib deinen Airtop API-Schlüssel ein. Du kannst deinen API-Schlüssel über das [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**Wie Sie Ihren API-Schlüssel erhalten:**\n\t\t1. Gehen Sie zur [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Melden Sie sich bei Ihrem Konto\n\t\t3 an. Navigieren Sie zum Abschnitt\n\t\t4. Erstellen Sie einen neuen API-Schlüssel oder kopieren Sie einen vorhandenen\n\t\t5. Fügen Sie den Schlüssel hier\n\tein\t",
|
||||
"Create Session": "Sitzung erstellen",
|
||||
"Terminate Session": "Sitzung beenden",
|
||||
"Create New Browser Window": "Neues Browserfenster erstellen",
|
||||
"Take Screenshot": "Screenshot machen",
|
||||
"Page Query": "Seitenabfrage",
|
||||
"Smart Scrape": "Smart Scrape",
|
||||
"Paginated Extraction": "Paginierte Extraktion",
|
||||
"Click": "Click",
|
||||
"Type": "Typ",
|
||||
"Upload File to Sessions": "Datei zu Sitzungen hochladen",
|
||||
"Hover on an Element": "Hover auf einem Element",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Starts a new browser session in Airtop.": "Startet eine neue Browsersitzung in Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Beendet eine bestehende Browsersitzung in Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Öffnet ein neues Fenster innerhalb einer Sitzung, wahlweise auf eine URL.",
|
||||
"Captures a screenshot of the current window.": "Erfasst einen Screenshot des aktuellen Fensters.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Abfragen einer Seite, um Daten zu extrahieren oder eine Frage zu stellen, die die Daten auf der Seite.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape eine Seite und gib die Daten als Markdown zurück.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extrahieren Sie Inhalte aus paginierten oder dynamisch geladenen Seiten.",
|
||||
"Execute a click interaction in a specific browser window.": "Führen Sie eine Click-Interaktion in einem bestimmten Browserfenster aus.",
|
||||
"Type into a browser window at the specified field.": "Geben Sie im angegebenen Feld in ein Browserfenster ein.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Eine existierende Datei in eine oder mehrere Sessions schieben und zur Verwendung in Datei-Eingaben oder -Downloads bereitstellen.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Bewegt den Mauszeiger über ein Element im Browserfenster.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Profile Name": "Profilname",
|
||||
"Extension IDs": "Erweiterungs-IDs",
|
||||
"Use Airtop Proxy?": "Airtop Proxy verwenden?",
|
||||
"Custom Proxy Configuration": "Benutzerdefinierte Proxy-Konfiguration",
|
||||
"Advanced Proxy Settings": "Erweiterte Proxy-Einstellungen",
|
||||
"Solve Captcha": "Captcha lösen",
|
||||
"Session Timeout (minutes)": "Sitzungs-Timeout (Minuten)",
|
||||
"Session": "Sitzung",
|
||||
"Initial URL": "Initiale URL",
|
||||
"Screen Resolution": "Bildschirmauflösung",
|
||||
"Custom Resolution": "Eigene Auflösung",
|
||||
"Page Load Strategy": "Seitenladestrategie",
|
||||
"Page Load Timeout (seconds)": "Seitenlade-Timeout (Sekunden)",
|
||||
"Window": "Fenster",
|
||||
"Client Request ID": "Kundenanfrage-ID",
|
||||
"Screenshot Format": "Screenshot-Format",
|
||||
"Screenshot Scope": "Screenshot-Bereich",
|
||||
"Max Height (pixels)": "Max. Höhe (Pixel)",
|
||||
"Max Width (pixels)": "Max. Breite (Pixel)",
|
||||
"JPEG Quality (1-100)": "JPEG-Qualität (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Erweiterte Visuelle Analyse aktivieren",
|
||||
"Visual Analysis Settings": "Visuelle Analyseeinstellungen",
|
||||
"Maximum Credits to Spend": "Maximale Anzahl auszugebender Credits",
|
||||
"Maximum Time (seconds)": "Maximale Zeit (Sekunden)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Ausgabeschema (JSON)",
|
||||
"Visual Analysis": "Visuelle Analyse",
|
||||
"Optimize URLs": "URLs optimieren",
|
||||
"Maximum Time (Seconds)": "Maximale Zeit (Sekunden)",
|
||||
"Follow Pagination Links": "Links zur Pagination folgen",
|
||||
"Scroll Within": "Scrolle innen",
|
||||
"How to Load More Content": "Wie man mehr Inhalte lädt",
|
||||
"Speed vs Accuracy": "Geschwindigkeit vs Genauigkeit",
|
||||
"Element Description": "Elementbeschreibung",
|
||||
"Click Type": "Klicktyp",
|
||||
"Page Analysis Scope": "Seitenanalysebereich",
|
||||
"Result Selection Strategy": "Ergebnisauswahlstrategie",
|
||||
"Partition Direction": "Partitionsrichtung",
|
||||
"Maximum Scan Scrolls": "Maximale Scan-Rollen",
|
||||
"Scan Scroll Delay (ms)": "Scan-Scroll-Verzögerung (ms)",
|
||||
"Overlap Percentage": "Prozentsatz Überlappung",
|
||||
"Wait for Navigation": "Warten auf Navigation",
|
||||
"Navigation Wait Until": "Navigation warten bis",
|
||||
"Navigation Timeout (Seconds)": "Navigations-Timeout (Sekunden)",
|
||||
"Text to Type": "Text eingeben",
|
||||
"Clear Input Field Before Typing": "Eingabefeld vor Eingabe löschen",
|
||||
"Press Enter After Typing": "Drücken Sie Enter nach Eingabe",
|
||||
"Press Tab After Typing": "Nach Eingabe Tab drücken",
|
||||
"Wait for Navigation After Typing": "Warte auf Navigation nach Eingabe",
|
||||
"Navigation Wait Strategy": "Navigationswartungsstrategie",
|
||||
"Max Scrolls (Scan Mode)": "Max. Scrolls (Scan-Modus)",
|
||||
"Chunk Overlap (%)": "Chunk-Überlappung (%)",
|
||||
"Scroll Delay (ms)": "Scroll-Verzögerung (ms)",
|
||||
"Max Credits to Spend": "Max. auszugebende Credits",
|
||||
"Max Time to Wait (Seconds)": "Maximale Wartezeit (Sekunden)",
|
||||
"File": "Datei",
|
||||
"Session IDs": "Sitzungs-IDs",
|
||||
"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)",
|
||||
"Name of a profile to load into the session.": "Name eines Profils, das in die Sitzung geladen werden soll.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Liste der Chrome-Erweiterungs-IDs von Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Aktivieren Sie den Proxy mit Airtop. Falls deaktiviert, konfigurieren Sie einen benutzerdefinierten Proxy.",
|
||||
"Automatically solve captcha challenges.": "Captcha-Herausforderungen automatisch lösen.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "Dauer vor Ablauf der Sitzung wegen Inaktivität (1-10080 Minuten). Standard: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Wählen Sie eine aktive Airtop Session für die Browser-Automatisierung",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL zum Öffnen im neuen Fenster. Standard: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Feste Abmessungen für das Browserfenster. Beeinflusst die Größe der Live-Ansicht.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Benutzerdefinierte Auflösung im Format \"widthxheight\" (z.B. \"1440x900\"). Leer lassen um die ausgewählte Auflösung oben zu verwenden.",
|
||||
"When to consider the page loaded. Default: load": "Wann die Seite geladen ist. Standard: laden",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Maximale Wartezeit für das Laden der Seite. Standard: 30 Sekunden",
|
||||
"Select a browser window within the chosen session": "Wählen Sie ein Browserfenster innerhalb der gewählten Sitzung",
|
||||
"Optional ID for tracking this request": "Optionale ID für die Verfolgung dieser Anfrage",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "Wie der Screenshot zurückgegeben wird. Standard: base64 für Viewport, url für Seite/Scan",
|
||||
"What part of the page to capture. Default: auto": "Welcher Teil der Seite erfasst werden soll. Standard: automatisch",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximale Höhe des Screenshots. Wird bei Bedarf verringert, Seitenverhältnis beibehalten.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximale Breite des Screenshots. Wird bei Bedarf herunterskaliert, Seitenverhältnis beibehalten.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Bildqualität für JPEG-Kompression. Höhere = bessere Qualität. Hinweis: Merkmal in der Entwicklung.",
|
||||
"Enable advanced visual analysis features for better page processing": "Erweiterte visuelle Analysefunktionen für eine bessere Seitenverarbeitung aktivieren",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Bildschirmfoto stoppen, wenn dies mehr kostet. Leer lassen für Standardlimit.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Screenshot stoppen, wenn dies länger dauert. Leer lassen für Standard-Timeout.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "Die Frage oder Anweisung an Airtop über die aktuelle Seite zu beantworten.",
|
||||
"An optional ID for your internal tracking.": "Eine optionale ID für Ihr internes Tracking.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "JSON-Schema, das die Struktur der Ausgabe definiert. Es muss ein gültiges JSON-Schema-Format sein.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Gibt an, ob die visuelle Analyse der Seite aufgenommen werden soll (Standard: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Verbessern Sie die Scraping-Leistung durch Optimierung der URLs (Standard: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Abbrechen, wenn die Kreditkosten diesen Betrag überschreiten. Auf 0 setzen um zu deaktivieren.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Abbrechen, wenn die Operation länger dauert. Setzen Sie 0 auf deaktivieren.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "Wenn aktiviert, wird Airtop versuchen, mehr Inhalte von Seiten zu laden, scrollen, etc. (Standard: falsch)",
|
||||
"Optional ID to track this request on your end.": "Optionale ID, um diese Anfrage an Ihrem Ende zu verfolgen.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Anleitungen, was extrahiert werden soll und wie paginiert werden soll (z.B. \"Navigiere durch 3 Seiten und entpacke Titel und Preise\").",
|
||||
"Optional ID to track this request.": "Optionale ID, um diese Anfrage zu verfolgen.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Beschreiben Sie den scrollbaren Bereich (z.B. \"Ergebniscontainer in der Mitte der Seite\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Wählen Sie, wie Sie durch Seiten navigieren sollen (Standard: Auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Balance zwischen Geschwindigkeit und Genauigkeit (Standard: Auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Beschreiben Sie das Element zum Klicken (z.B. \"Anmelden\").",
|
||||
"The type of click to perform (default: left click).": "Der Typ des auszuführenden Klicks (Standard: Linksklick).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Beschreiben Sie den scrollbaren Bereich zur Suche (z.B. \"Hauptinhaltsbereich\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Legt fest, wie viel der Seite visuell analysiert wird (Standard: auto).",
|
||||
"How to select from multiple matches (default: auto).": "Wie man aus mehreren Treffer auswählen kann (Standard: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "Wie Partition Screenshots für die Analyse (Standard: vertikal).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Maximale Anzahl der Scrolls im Scanmodus (Standard: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Verzögerung zwischen Scrollen im Scanmodus (Standard: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Prozentsatz der Überlappung zwischen Screenshot-Chunks (Standard: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Warten Sie, bis die Seitennavigation nach einem Klick abgeschlossen ist (Standard: falsch).",
|
||||
"When to consider navigation complete (default: load).": "Wenn die Navigation abgeschlossen ist (Standard: Laden).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Maximale Sekunden warten auf die Navigation (Standard: 30).",
|
||||
"The text to type into the browser window.": "Der Text, der in das Browserfenster eingegeben werden soll.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Beschreiben Sie das Element (z.B. \"search box\", \"username field\").",
|
||||
"Clear the input field before typing text.": "Leeren Sie das Eingabefeld, bevor Sie Text eingeben.",
|
||||
"Press Enter key after typing text.": "Drücken Sie die Eingabetaste, nachdem Sie Text eingegeben haben.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Drücken Sie die Tab-Taste nach Eingabe des Textes (nach Enter wenn beide aktiviert sind).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Warten Sie, bis die Seitennavigation nach dem Tippen abgeschlossen ist (Standard: falsch).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Maximale Wartezeit nach Eingabe der Navigation (Standard: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Bedingung, dass die Navigation abgeschlossen ist (Standard: Laden).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Legt fest, wie viel der Seite analysiert wird, um die Eingabe zu finden (Standard: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Prozentsatz der Überlappung zwischen visuellen Chunks (Standard: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Richtung der Partition Screenshots (Standard: vertikal).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Beschreiben Sie den scrollbaren Container (z.B. \"table body\", \"product list\").",
|
||||
"Optional request ID for traceability.": "Optionale Request-ID für Rückverfolgbarkeit.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Abbrechen, wenn dieses Limit überschritten wurde. Setzen Sie 0 zum Deaktivieren.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Abbrechen wenn überschritten. Setzen Sie 0 zum Deaktivieren.",
|
||||
"Select a file that has been uploaded to Airtop": "Wählen Sie eine Datei, die nach Airtop hochgeladen wurde",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Wählen Sie eine oder mehrere Sitzungen, um die Datei verfügbar zu machen. Lassen Sie leer, um alle Sitzungen zur Verfügung zu stellen.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Beschreiben Sie das zu schwebende Element, z.B. \"das Suchfeld in der oberen rechten Ecke\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Warten Sie, bis die Seitennavigation nach dem Schweben abgeschlossen ist (Standard: falsch).",
|
||||
"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..",
|
||||
"1280x720 (Default)": "1280x720 (Standard)",
|
||||
"1920x1080": "1920 x 1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Laden (Seite + Assets) - Standard",
|
||||
"DOM Content Loaded": "DOM Inhalt geladen",
|
||||
"Complete (Page + Iframes)": "Abschließen (Seite + Iframes)",
|
||||
"No Wait (Return Immediately)": "Keine Wartezeit (sofort zurückkehren)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 Daten (Standard für Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "Download-URL (Standard für Seite/Scan)",
|
||||
"Auto (Recommended)": "Auto (empfohlen)",
|
||||
"Current View Only": "Nur aktuelle Ansicht",
|
||||
"Full Page": "Vollseite",
|
||||
"Scan Mode (For Problem Pages)": "Scan-Modus (für Problemseiten)",
|
||||
"Auto (Default)": "Auto (Standard)",
|
||||
"Enabled": "Aktiviert",
|
||||
"Disabled": "Deaktiviert",
|
||||
"Click Next/Previous Links": "Klicken Sie Next/Vorherige Links",
|
||||
"Infinite Scroll": "Unendliche Schriftrolle",
|
||||
"Auto (Balanced)": "Auto (ausgeglichen)",
|
||||
"More Accurate (Slower)": "Mehr Genauigkeit (niedriger)",
|
||||
"Faster (Less Accurate)": "Schnellere (weniger Genauigkeit)",
|
||||
"Left Click": "Linksklick",
|
||||
"Double Click": "Doppelklick",
|
||||
"Right Click": "Rechtsklick",
|
||||
"Scan Mode": "Scan-Modus",
|
||||
"Auto": "Auto",
|
||||
"First Match": "Erstes Spiel",
|
||||
"Best Match": "Bestes Match",
|
||||
"Vertical": "Vertikal",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidirektional",
|
||||
"load": "laden",
|
||||
"domcontentloaded": "domcontentgeladen",
|
||||
"networkidle0": "networkidle0",
|
||||
"networkidle2": "networkidle2",
|
||||
"Load (Default)": "Laden (Standard)",
|
||||
"Network Idle 0": "Netzwerk Leerlauf 0",
|
||||
"Network Idle 2": "Netzwerk Leerlauf 2",
|
||||
"Viewport Only": "Nur Viewport",
|
||||
"Vertical (Default)": "Vertikal (Standard)",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tIntroduzca su clave API Airtop. Puede obtener su clave API desde el [Panel de control Airtop](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**Cómo obtener tu clave API:**\n\t\t1. Ve al [Tablero de Airtop](https://portal.airtop.ai/api-keys)\n\t\t2. Inicia sesión en tu cuenta\n\t\t3. Navegue a la sección de claves API\n\t\t4. Cree una nueva clave API o copie una existente\n\t\t5. Pegue la clave aquí\n\t",
|
||||
"Create Session": "Crear sesión",
|
||||
"Terminate Session": "Terminar sesión",
|
||||
"Create New Browser Window": "Crear nueva ventana del navegador",
|
||||
"Take Screenshot": "Captura de pantalla",
|
||||
"Page Query": "Consulta de página",
|
||||
"Smart Scrape": "Raspe inteligente",
|
||||
"Paginated Extraction": "Extracción paginada",
|
||||
"Click": "Click",
|
||||
"Type": "Tipo",
|
||||
"Upload File to Sessions": "Subir archivo a sesiones",
|
||||
"Hover on an Element": "Aplique sobre un elemento",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Starts a new browser session in Airtop.": "Inicia una nueva sesión de navegador en Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Termina una sesión de navegador existente en Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Abre una nueva ventana dentro de una sesión, opcionalmente navegando a una URL.",
|
||||
"Captures a screenshot of the current window.": "Captura una captura de pantalla de la ventana actual.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Consulta una página para extraer datos o hacer una pregunta dada los datos de la página.",
|
||||
"Scrape a page and return the data as Markdown.": "Raspe una página y devuelve los datos como Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extraer contenido de páginas paginadas o cargadas dinámicamente.",
|
||||
"Execute a click interaction in a specific browser window.": "Ejecutar una interacción de clic en una ventana específica del navegador.",
|
||||
"Type into a browser window at the specified field.": "Escriba en una ventana del navegador en el campo especificado.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Enviar un archivo existente a una o más sesiones, haciéndolo disponible para su uso en entradas o descargas de archivos.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Mueve el puntero del ratón sobre un elemento en la ventana del navegador.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Profile Name": "Nombre de perfil",
|
||||
"Extension IDs": "IDs de extensión",
|
||||
"Use Airtop Proxy?": "¿Usar proxy de Airtop?",
|
||||
"Custom Proxy Configuration": "Configuración de proxy personalizado",
|
||||
"Advanced Proxy Settings": "Ajustes avanzados de proxy",
|
||||
"Solve Captcha": "Resolver Captcha",
|
||||
"Session Timeout (minutes)": "Tiempo de espera de sesión (minutos)",
|
||||
"Session": "Sesión",
|
||||
"Initial URL": "URL inicial",
|
||||
"Screen Resolution": "Resolución de pantalla",
|
||||
"Custom Resolution": "Resolución personalizada",
|
||||
"Page Load Strategy": "Estrategia de carga de página",
|
||||
"Page Load Timeout (seconds)": "Tiempo de espera de carga de página (segundos)",
|
||||
"Window": "Ventana",
|
||||
"Client Request ID": "ID de Solicitud de Cliente",
|
||||
"Screenshot Format": "Formato de captura de pantalla",
|
||||
"Screenshot Scope": "Alcance de captura",
|
||||
"Max Height (pixels)": "Altura máxima (píxeles)",
|
||||
"Max Width (pixels)": "Ancho máximo (píxeles)",
|
||||
"JPEG Quality (1-100)": "Calidad JPEG (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Activar análisis visual avanzado",
|
||||
"Visual Analysis Settings": "Ajustes de análisis visual",
|
||||
"Maximum Credits to Spend": "Máximos créditos a gastar",
|
||||
"Maximum Time (seconds)": "Tiempo máximo (segundos)",
|
||||
"Prompt": "Petición",
|
||||
"Output Schema (JSON)": "Esquema de salida (JSON)",
|
||||
"Visual Analysis": "Análisis visual",
|
||||
"Optimize URLs": "Optimizar URLs",
|
||||
"Maximum Time (Seconds)": "Tiempo máximo (segundos)",
|
||||
"Follow Pagination Links": "Seguir enlaces de paginación",
|
||||
"Scroll Within": "Desplazar dentro",
|
||||
"How to Load More Content": "Cómo cargar más contenido",
|
||||
"Speed vs Accuracy": "Velocidad vs Precisión",
|
||||
"Element Description": "Descripción del elemento",
|
||||
"Click Type": "Tipo de clic",
|
||||
"Page Analysis Scope": "Ámbito de análisis de página",
|
||||
"Result Selection Strategy": "Estrategia de selección de resultados",
|
||||
"Partition Direction": "Dirección de la partición",
|
||||
"Maximum Scan Scrolls": "Pergamino máximo de escaneo",
|
||||
"Scan Scroll Delay (ms)": "Escanear retardo de desplazamiento (ms)",
|
||||
"Overlap Percentage": "Porcentaje de superposición",
|
||||
"Wait for Navigation": "Espere a Navegación",
|
||||
"Navigation Wait Until": "Espera Navegación hasta",
|
||||
"Navigation Timeout (Seconds)": "Tiempo de navegación agotado (segundos)",
|
||||
"Text to Type": "Texto a escribir",
|
||||
"Clear Input Field Before Typing": "Borrar campo de entrada antes de escribir",
|
||||
"Press Enter After Typing": "Pulse Entrar después de escribir",
|
||||
"Press Tab After Typing": "Pulse la pestaña después de escribir",
|
||||
"Wait for Navigation After Typing": "Esperar a Navegación Después de Typing",
|
||||
"Navigation Wait Strategy": "Estrategia de Navegación de Espera",
|
||||
"Max Scrolls (Scan Mode)": "Pergamino máximo (Modo Escanear)",
|
||||
"Chunk Overlap (%)": "Superposición de trozo (%)",
|
||||
"Scroll Delay (ms)": "Retraso de desplazamiento (ms)",
|
||||
"Max Credits to Spend": "Créditos máximos a gastar",
|
||||
"Max Time to Wait (Seconds)": "Tiempo máximo de espera (segundos)",
|
||||
"File": "Archivo",
|
||||
"Session IDs": "ID de sesión",
|
||||
"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)",
|
||||
"Name of a profile to load into the session.": "Nombre de un perfil a cargar en la sesión.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Lista de ID de extensión Chrome de Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Habilitar proxy Airtop. Si está deshabilitado, configure un proxy personalizado.",
|
||||
"Automatically solve captcha challenges.": "Resolver automáticamente los desafíos captcha.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "Cuánto tiempo antes de que la sesión termine debido a inactividad (1-10080 minutos). Por defecto: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Seleccione una sesión activa de Airtop para la automatización del navegador",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL a abrir en la nueva ventana. Por defecto: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Dimensiones fijas para la ventana del navegador. Afecta al tamaño de la vista en vivo.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Resolución personalizada en formato \"widthxheight\" (por ejemplo, \"1440x900\"). Deje en blanco para usar la resolución seleccionada arriba.",
|
||||
"When to consider the page loaded. Default: load": "Cuándo considerar la página cargada. Por defecto: carga",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Tiempo máximo de espera para la carga de la página. Por defecto: 30 segundos",
|
||||
"Select a browser window within the chosen session": "Seleccione una ventana del navegador dentro de la sesión seleccionada",
|
||||
"Optional ID for tracking this request": "ID opcional para rastrear esta solicitud",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "Cómo devolver la captura de pantalla. Por defecto: base64 para viewport, url para pagina/escaneo",
|
||||
"What part of the page to capture. Default: auto": "Qué parte de la página para capturar. Por defecto: auto",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Altura máxima de la captura de pantalla. Reducirá si es necesario, preservando la relación de aspecto.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Ancho máximo de la captura de pantalla. Reducirá si es necesario, preservando la relación de aspecto.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Calidad de imagen para compresión JPEG. Más alta = mejor calidad. Nota: Característica en desarrollo.",
|
||||
"Enable advanced visual analysis features for better page processing": "Habilitar características avanzadas de análisis visual para un mejor procesamiento de página",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Detener captura de pantalla si cuesta más de esto. Dejar en blanco para el límite predeterminado.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Detener captura de pantalla si tarda más de esto. Dejar en blanco para el tiempo de espera predeterminado.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "La pregunta o instrucciones para que Airtop responda acerca de la página actual.",
|
||||
"An optional ID for your internal tracking.": "Un ID opcional para su seguimiento interno.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "Esquema JSON que define la estructura de la salida. Debe ser un formato JSON válido.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Si incluir el análisis visual de la página (por defecto: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Mejorar el rendimiento del raspado optimizando URLs (por defecto: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Cancelar si el coste del crédito supera esta cantidad. Establecer a 0 para desactivar.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Cancelar si la operación tarda más de esto. Establecer en 0 para desactivar.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "Si está activado, Airtop intentará cargar más contenido de la paginación, desplazamiento, etc. (por defecto: falso)",
|
||||
"Optional ID to track this request on your end.": "ID opcional para rastrear esta solicitud al final.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instrucciones sobre qué extraer y cómo paginar (por ejemplo, \"Navegar a través de 3 páginas y extraer títulos y precios\").",
|
||||
"Optional ID to track this request.": "ID opcional para rastrear esta solicitud.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Describa el área desplazable (por ejemplo, \"contenedor de resultados en el centro de la página\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Elegir cómo navegar a través de páginas (por defecto: auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Balance entre velocidad y precisión (por defecto: auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Describa el elemento a pulsar (p.e. \"Botón de conexión\").",
|
||||
"The type of click to perform (default: left click).": "El tipo de clic a realizar (por defecto: clic izquierdo).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Describa el área desplazable en la que buscar (por ejemplo, \"área principal de contenido\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Controla cuánto de la página se analiza visualmente (por defecto: auto).",
|
||||
"How to select from multiple matches (default: auto).": "Cómo seleccionar de múltiples coincidencias (por defecto: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "Cómo particionar las capturas de pantalla para el análisis (por defecto: vertical).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Número máximo de desplazamientos en modo de escaneo (por defecto: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Retardo entre desplazamientos en modo escaneo (por defecto: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Porcentaje de superposición entre fragmentos de captura de pantalla (por defecto: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Espere a que la página de navegación se complete después de hacer clic (por defecto: falso).",
|
||||
"When to consider navigation complete (default: load).": "Cuándo considerar la navegación completa (por defecto: carga).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Máximo de segundos para esperar a la navegación (por defecto: 30).",
|
||||
"The text to type into the browser window.": "El texto a escribir en la ventana del navegador.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Describa el elemento (por ejemplo, \"caja de búsqueda\", \"campo nombre de usuario\").",
|
||||
"Clear the input field before typing text.": "Elimina el campo de entrada antes de escribir texto.",
|
||||
"Press Enter key after typing text.": "Pulse la tecla Enter después de escribir texto.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Pulse la tecla Tab después de escribir texto (después de Enter si ambos habilitados).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Espere a que la navegación de la página se complete después de escribir (por defecto: falso).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Tiempo máximo de espera para la navegación después de escribir (por defecto: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Condición para considerar la navegación completa (por defecto: carga).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Controla cuánto de la página se analiza para encontrar la entrada (por defecto: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Porcentaje de superposición entre fragmentos visuales (por defecto: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Dirección a las capturas de pantalla de particiones (por defecto: vertical).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Describa el contenedor desplazable (por ejemplo, \"cuerpo de la tabla\", \"lista de productos\").",
|
||||
"Optional request ID for traceability.": "ID de solicitud opcional para trazabilidad.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Cancelar si este límite es excedido. Establecer 0 para desactivar.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Cancelar si se excede. Establecer 0 para desactivar.",
|
||||
"Select a file that has been uploaded to Airtop": "Seleccione un archivo que se ha subido a Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Seleccione una o más sesiones para que el archivo esté disponible. Deje en blanco para poner a disposición de todas las sesiones.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Describa el elemento a actualizar, por ejemplo, \"la entrada del cuadro de búsqueda en la esquina superior derecha\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Espere a que la navegación de la página se complete después de pasar el cursor (por defecto: falso).",
|
||||
"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.",
|
||||
"1280x720 (Default)": "1280x720 (por defecto)",
|
||||
"1920x1080": "1920 x 1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Cargar (Página + Activos) - Por defecto",
|
||||
"DOM Content Loaded": "Contenido DOM cargado",
|
||||
"Complete (Page + Iframes)": "Completa (Página + Iframes)",
|
||||
"No Wait (Return Immediately)": "Sin Espera (Return Inmediatamente)",
|
||||
"Base64 Data (Default for Viewport)": "Datos Base64 (por defecto para el puerto de visualización)",
|
||||
"Download URL (Default for Page/Scan)": "URL de descarga (por defecto para página/escanear)",
|
||||
"Auto (Recommended)": "Auto (recomendado)",
|
||||
"Current View Only": "Solo vista actual",
|
||||
"Full Page": "Página completa",
|
||||
"Scan Mode (For Problem Pages)": "Modo de escaneo (para páginas de problemas)",
|
||||
"Auto (Default)": "Auto (por defecto)",
|
||||
"Enabled": "Activado",
|
||||
"Disabled": "Deshabilitado",
|
||||
"Click Next/Previous Links": "Haga clic en Siguiente/Anterior Enlaces",
|
||||
"Infinite Scroll": "Pergamino infinito",
|
||||
"Auto (Balanced)": "Auto (equilibrado)",
|
||||
"More Accurate (Slower)": "Más preciso (más lento)",
|
||||
"Faster (Less Accurate)": "Más rápido (menos preciso)",
|
||||
"Left Click": "Clic izquierdo",
|
||||
"Double Click": "Doble clic",
|
||||
"Right Click": "Clic derecho",
|
||||
"Scan Mode": "Modo de escaneo",
|
||||
"Auto": "Auto",
|
||||
"First Match": "Primera partida",
|
||||
"Best Match": "Mejor partido",
|
||||
"Vertical": "Vertical",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidireccional",
|
||||
"load": "cargar",
|
||||
"domcontentloaded": "domcontentcargado",
|
||||
"networkidle0": "idle de red",
|
||||
"networkidle2": "idle2 de red",
|
||||
"Load (Default)": "Cargar (por defecto)",
|
||||
"Network Idle 0": "Red inactiva 0",
|
||||
"Network Idle 2": "Red inactiva 2",
|
||||
"Viewport Only": "Sólo ver puerto",
|
||||
"Vertical (Default)": "Vertical (por defecto)",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t",
|
||||
"Create Session": "Créer une session",
|
||||
"Terminate Session": "Terminer la session",
|
||||
"Create New Browser Window": "Créer une nouvelle fenêtre de navigation",
|
||||
"Take Screenshot": "Prendre une capture d'écran",
|
||||
"Page Query": "Requête de page",
|
||||
"Smart Scrape": "Scrape Intelligent",
|
||||
"Paginated Extraction": "Extraction paginée",
|
||||
"Click": "Click",
|
||||
"Type": "Type de texte",
|
||||
"Upload File to Sessions": "Télécharger le fichier dans les sessions",
|
||||
"Hover on an Element": "Survoler sur un élément",
|
||||
"Custom API Call": "Appel d'API personnalisé",
|
||||
"Starts a new browser session in Airtop.": "Démarre une nouvelle session de navigateur dans Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Termine une session de navigateur existante dans Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Ouvre une nouvelle fenêtre dans une session en naviguant éventuellement vers une URL.",
|
||||
"Captures a screenshot of the current window.": "Capture une capture d'écran de la fenêtre actuelle.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Interroger une page pour extraire des données ou poser une question donnée par les données sur la page.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape une page et retourne les données en tant que Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extraire le contenu des pages paginées ou chargées dynamiquement.",
|
||||
"Execute a click interaction in a specific browser window.": "Exécuter une interaction de clic dans une fenêtre de navigateur spécifique.",
|
||||
"Type into a browser window at the specified field.": "Tapez dans une fenêtre du navigateur dans le champ spécifié.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Poussez un fichier existant vers une ou plusieurs sessions, en le rendant disponible dans les entrées ou les téléchargements de fichiers.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Déplace le pointeur de la souris sur un élément de la fenêtre du navigateur.",
|
||||
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
|
||||
"Profile Name": "Nom du profil",
|
||||
"Extension IDs": "IDs d'extension",
|
||||
"Use Airtop Proxy?": "Utiliser le proxy Airtop ?",
|
||||
"Custom Proxy Configuration": "Configuration du proxy personnalisé",
|
||||
"Advanced Proxy Settings": "Paramètres avancés du proxy",
|
||||
"Solve Captcha": "Résoudre le Captcha",
|
||||
"Session Timeout (minutes)": "Délai de session (minutes)",
|
||||
"Session": "Séance",
|
||||
"Initial URL": "URL initiale",
|
||||
"Screen Resolution": "Résolution de l'écran",
|
||||
"Custom Resolution": "Résolution personnalisée",
|
||||
"Page Load Strategy": "Stratégie de chargement de page",
|
||||
"Page Load Timeout (seconds)": "Délai de chargement de la page (secondes)",
|
||||
"Window": "Fenêtre",
|
||||
"Client Request ID": "ID de la requête du client",
|
||||
"Screenshot Format": "Format de capture d'écran",
|
||||
"Screenshot Scope": "Portée de la capture d'écran",
|
||||
"Max Height (pixels)": "Hauteur max (pixels)",
|
||||
"Max Width (pixels)": "Largeur max (pixels)",
|
||||
"JPEG Quality (1-100)": "Qualité JPEG (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Activer l'analyse visuelle avancée",
|
||||
"Visual Analysis Settings": "Paramètres d'analyse visuelle",
|
||||
"Maximum Credits to Spend": "Nombre maximum de crédits à dépenser",
|
||||
"Maximum Time (seconds)": "Temps maximum (secondes)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Schéma de sortie (JSON)",
|
||||
"Visual Analysis": "Analyse visuelle",
|
||||
"Optimize URLs": "Optimiser les URL",
|
||||
"Maximum Time (Seconds)": "Temps maximum (secondes)",
|
||||
"Follow Pagination Links": "Suivre les liens de pagination",
|
||||
"Scroll Within": "Défiler à l'intérieur",
|
||||
"How to Load More Content": "Comment charger plus de contenu",
|
||||
"Speed vs Accuracy": "Vitesse vs Précision",
|
||||
"Element Description": "Description de l'élément",
|
||||
"Click Type": "Type de clic",
|
||||
"Page Analysis Scope": "Portée d'analyse de la page",
|
||||
"Result Selection Strategy": "Stratégie de sélection des résultats",
|
||||
"Partition Direction": "Direction de la partition",
|
||||
"Maximum Scan Scrolls": "Défilement de balayage maximum",
|
||||
"Scan Scroll Delay (ms)": "Délai de défilement du scan (ms)",
|
||||
"Overlap Percentage": "Pourcentage de chevauchement",
|
||||
"Wait for Navigation": "Attendre la navigation",
|
||||
"Navigation Wait Until": "Attendre la navigation jusqu'à",
|
||||
"Navigation Timeout (Seconds)": "Délai de navigation (secondes)",
|
||||
"Text to Type": "Texte à Type",
|
||||
"Clear Input Field Before Typing": "Effacer le champ de saisie avant de taper",
|
||||
"Press Enter After Typing": "Appuyez sur Entrée après la saisie",
|
||||
"Press Tab After Typing": "Appuyez sur Tab après avoir tapé",
|
||||
"Wait for Navigation After Typing": "Attendre la navigation après la frappe",
|
||||
"Navigation Wait Strategy": "Stratégie de navigation en attente",
|
||||
"Max Scrolls (Scan Mode)": "Défilement max (mode scan)",
|
||||
"Chunk Overlap (%)": "Chevauchement de tronçons (%)",
|
||||
"Scroll Delay (ms)": "Délai de défilement (ms)",
|
||||
"Max Credits to Spend": "Nombre maximum de crédits à dépenser",
|
||||
"Max Time to Wait (Seconds)": "Temps maximum d'attente (secondes)",
|
||||
"File": "Ficher",
|
||||
"Session IDs": "ID de session",
|
||||
"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'expiration (en secondes)",
|
||||
"Name of a profile to load into the session.": "Nom du profil à charger dans la session.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Liste des ID d'extension Chrome de Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Activer le proxy fourni par Airtop. Si désactivé, configurer un proxy personnalisé.",
|
||||
"Automatically solve captcha challenges.": "Résoudre automatiquement les défis du captcha.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "Combien de temps avant la sortie de la session en raison de l'inactivité (1-10080 minutes). Par défaut: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Sélectionnez une session Airtop active à utiliser pour l'automatisation du navigateur",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL à ouvrir dans la nouvelle fenêtre. Par défaut: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Dimensions fixes pour la fenêtre du navigateur. Affecte la taille de la vue live.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Résolution personnalisée au format \"widthxheight\" (par exemple, \"1440x900\"). Laisser vide pour utiliser la résolution sélectionnée ci-dessus.",
|
||||
"When to consider the page loaded. Default: load": "Quand considérer la page chargée. Par défaut: charger",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Temps d'attente maximum pour le chargement de la page. Par défaut: 30 secondes",
|
||||
"Select a browser window within the chosen session": "Sélectionnez une fenêtre de navigateur dans la session choisie",
|
||||
"Optional ID for tracking this request": "ID facultatif pour le suivi de cette requête",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "Comment retourner la capture d'écran. Par défaut: base64 pour le port d'affichage, url pour la page/scan",
|
||||
"What part of the page to capture. Default: auto": "Quelle partie de la page à capturer. Par défaut: auto",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Hauteur maximale de la capture d'écran. Diminuera la taille si nécessaire, en préservant le rapport d'aspect.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Largeur maximale de la capture d'écran. Diminuera si nécessaire, en préservant le rapport d'aspect.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Qualité d'image pour la compression JPEG. Plus élevé = meilleure qualité. Note : Fonctionnalité en développement.",
|
||||
"Enable advanced visual analysis features for better page processing": "Activer les fonctionnalités avancées d'analyse visuelle pour un meilleur traitement des pages",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Arrêter la capture d'écran si cela coûte plus cher. Laisser vide pour la limite par défaut.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Arrêter la capture d'écran si cela prend plus de temps. Laisser vide pour le délai par défaut.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "La question ou les instructions pour que Airtop réponde à la page courante.",
|
||||
"An optional ID for your internal tracking.": "Un ID optionnel pour votre suivi interne.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "Schéma JSON définissant la structure de la sortie. Doit être un format de schéma JSON valide.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Inclure ou non l'analyse visuelle de la page (par défaut: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Améliore les performances de scraping en optimisant les URLs (par défaut: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Annuler si le coût du crédit dépasse ce montant. Mettre à 0 pour désactiver.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Interrompre si l'opération prend plus de temps. Réglez sur 0 pour désactiver.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "Si activé, Airtop tentera de charger plus de contenu à partir de la pagination, du défilement, etc. (par défaut: false)",
|
||||
"Optional ID to track this request on your end.": "ID facultatif pour suivre cette requête à votre fin.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instructions sur ce qu'il faut extraire et comment paginer (par exemple, \"Naviguer à travers 3 pages et extraire les titres et les prix\").",
|
||||
"Optional ID to track this request.": "ID optionnel pour suivre cette requête.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Décrire la zone de défilement (par exemple \"conteneur de résultats au milieu de la page\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Choisir comment naviguer à travers les pages (par défaut: auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Balance entre la vitesse et la précision (par défaut: auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Décrivez l'élément à cliquer (par exemple \"Bouton de connexion\").",
|
||||
"The type of click to perform (default: left click).": "Le type de clic à effectuer (par défaut: clic gauche).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Décrivez la zone de défilement dans laquelle rechercher (par exemple \"zone de contenu principale\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Contrôle la quantité de la page analysée visuellement (par défaut: auto).",
|
||||
"How to select from multiple matches (default: auto).": "Comment choisir parmi plusieurs correspondances (par défaut: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "Comment partitionner des captures d'écran pour l'analyse (par défaut: vertical).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Nombre maximum de défilements en mode scan (par défaut: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Délai entre les défilements en mode scan (par défaut: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Pourcentage de chevauchement entre les chunks de capture d'écran (par défaut: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Attendez que la navigation de la page soit terminée après avoir cliqué (par défaut: false).",
|
||||
"When to consider navigation complete (default: load).": "Quand considérer la navigation comme terminée (par défaut: chargement).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Max secondes à attendre pour la navigation (par défaut: 30).",
|
||||
"The text to type into the browser window.": "Le texte à taper dans la fenêtre du navigateur.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Décrivez l'élément (par exemple, \"case de recherche\", \"champ utilisateur\").",
|
||||
"Clear the input field before typing text.": "Effacer le champ de saisie avant de taper du texte.",
|
||||
"Press Enter key after typing text.": "Appuyez sur la touche Entrée après avoir tapé du texte.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Appuyez sur la touche Tab après avoir tapé du texte (après Entrée si les deux sont activés).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Attendez que la navigation de la page se termine après avoir tapé (par défaut: false).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Temps maximum pour attendre la navigation après avoir tapé (par défaut: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Condition à considérer la navigation complète (par défaut: chargement).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Contrôle la quantité de la page analysée pour trouver l'entrée (par défaut: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Pourcentage de chevauchement entre les chunks visuels (par défaut : 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Direction vers les captures d'écran de partition (par défaut: vertical).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Décrivez le conteneur scrollable (par exemple, \"corps du tableau\", \"liste des produits\").",
|
||||
"Optional request ID for traceability.": "ID de requête optionnel pour la traçabilité.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Annuler si cette limite est dépassée. Mettre 0 pour désactiver.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Annuler si dépassé. Définir 0 pour désactiver.",
|
||||
"Select a file that has been uploaded to Airtop": "Sélectionnez un fichier qui a été téléchargé sur Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Sélectionnez une ou plusieurs sessions pour rendre le fichier disponible. Laissez vide pour rendre disponible à toutes les sessions.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Décrivez l'élément à survoler, par exemple \"le champ de recherche dans le coin supérieur droit\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Attendez que la navigation de la page soit terminée après le survol (par défaut: false).",
|
||||
"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 PDF, les images, etc.",
|
||||
"1280x720 (Default)": "1280x720 (par défaut)",
|
||||
"1920x1080": "1920 x 1080",
|
||||
"1366x768": "1366 x 768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Charge (Page + actifs) - Défaut",
|
||||
"DOM Content Loaded": "Contenu DOM chargé",
|
||||
"Complete (Page + Iframes)": "Complet (Page + Iframes)",
|
||||
"No Wait (Return Immediately)": "Pas d'attente (Revenir immédiatement)",
|
||||
"Base64 Data (Default for Viewport)": "Données Base64 (par défaut pour le Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "URL de téléchargement (Par défaut pour la Page/Scan)",
|
||||
"Auto (Recommended)": "Auto (Recommandé)",
|
||||
"Current View Only": "Vue actuelle uniquement",
|
||||
"Full Page": "Page complète",
|
||||
"Scan Mode (For Problem Pages)": "Mode de scan (Pour les pages de problèmes)",
|
||||
"Auto (Default)": "Auto (par défaut)",
|
||||
"Enabled": "Activé",
|
||||
"Disabled": "Désactivé",
|
||||
"Click Next/Previous Links": "Cliquez sur les liens suivants/précédents",
|
||||
"Infinite Scroll": "Parchemin infini",
|
||||
"Auto (Balanced)": "Auto (Équilibre)",
|
||||
"More Accurate (Slower)": "Plus de précision (plus lent)",
|
||||
"Faster (Less Accurate)": "Plus rapide (moins précis)",
|
||||
"Left Click": "Clic gauche",
|
||||
"Double Click": "Double clic",
|
||||
"Right Click": "Clic droit",
|
||||
"Scan Mode": "Mode de scan",
|
||||
"Auto": "Automatique",
|
||||
"First Match": "Premier match",
|
||||
"Best Match": "Meilleure correspondance",
|
||||
"Vertical": "Vertical",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidirectionnel",
|
||||
"load": "Charger",
|
||||
"domcontentloaded": "format@@0 domcontent loaded",
|
||||
"networkidle0": "sans réseau0",
|
||||
"networkidle2": "réseau2",
|
||||
"Load (Default)": "Charger (par défaut)",
|
||||
"Network Idle 0": "Inactivité du réseau 0",
|
||||
"Network Idle 2": "Inactivité réseau 2",
|
||||
"Viewport Only": "Affichage uniquement",
|
||||
"Vertical (Default)": "Vertical (par défaut)",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t",
|
||||
"Create Session": "セッションを作成",
|
||||
"Terminate Session": "セッションを終了",
|
||||
"Create New Browser Window": "新しいブラウザウィンドウを作成",
|
||||
"Take Screenshot": "スクリーンショットを撮影",
|
||||
"Page Query": "ページクエリ",
|
||||
"Smart Scrape": "スマートスクレイプ",
|
||||
"Paginated Extraction": "ページ化された抽出",
|
||||
"Click": "Click",
|
||||
"Type": "タイプ",
|
||||
"Upload File to Sessions": "セッションにファイルをアップロード",
|
||||
"Hover on an Element": "エレメントの上にカーソルを置く",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Starts a new browser session in Airtop.": "Airtopで新しいブラウザセッションを開始します。",
|
||||
"Ends an existing browser session in Airtop.": "Airtopで既存のブラウザセッションを終了します。",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "セッション内で新しいウィンドウを開き、必要に応じてURLに移動します。",
|
||||
"Captures a screenshot of the current window.": "現在のウィンドウのスクリーンショットをキャプチャします。",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "ページにデータを抽出したり、ページ上のデータに与えられた質問をしたりするためにページに問い合わせます。",
|
||||
"Scrape a page and return the data as Markdown.": "ページをスクラップして、データを Markdown として返します。",
|
||||
"Extract content from paginated or dynamically loaded pages.": "ページ化または動的にロードされたページからコンテンツを抽出します。",
|
||||
"Execute a click interaction in a specific browser window.": "特定のブラウザウィンドウでクリック操作を実行します。",
|
||||
"Type into a browser window at the specified field.": "指定したフィールドにブラウザウィンドウを入力します。",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "既存のファイルを 1 つまたは複数のセッションにプッシュすると、ファイルの入力またはダウンロードで使用できるようになります。",
|
||||
"Moves mouse pointer over an element in the browser window.": "ブラウザーウィンドウ内の要素の上にマウスポインタを移動します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Profile Name": "プロファイル名",
|
||||
"Extension IDs": "エクステンションID",
|
||||
"Use Airtop Proxy?": "Airtopプロキシを使用しますか?",
|
||||
"Custom Proxy Configuration": "カスタムプロキシ設定",
|
||||
"Advanced Proxy Settings": "プロキシの詳細設定",
|
||||
"Solve Captcha": "Captcha を解決",
|
||||
"Session Timeout (minutes)": "セッションタイムアウト(分)",
|
||||
"Session": "セッション",
|
||||
"Initial URL": "初期URL",
|
||||
"Screen Resolution": "画面の解像度",
|
||||
"Custom Resolution": "カスタム解像度",
|
||||
"Page Load Strategy": "ページ読み込み戦略",
|
||||
"Page Load Timeout (seconds)": "ページ読み込みタイムアウト(秒)",
|
||||
"Window": "ウィンドウ",
|
||||
"Client Request ID": "クライアントリクエストID",
|
||||
"Screenshot Format": "スクリーンショットの形式",
|
||||
"Screenshot Scope": "スクリーンショットスコープ",
|
||||
"Max Height (pixels)": "高さの最大値(ピクセル)",
|
||||
"Max Width (pixels)": "幅の最大値(ピクセル)",
|
||||
"JPEG Quality (1-100)": "JPEG品質 (1-100)",
|
||||
"Enable Advanced Visual Analysis": "高度な視覚分析を有効にする",
|
||||
"Visual Analysis Settings": "ビジュアル分析の設定",
|
||||
"Maximum Credits to Spend": "使用する最大クレジット数",
|
||||
"Maximum Time (seconds)": "最大時間 (秒)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "出力スキーマ(JSON)",
|
||||
"Visual Analysis": "ビジュアル分析",
|
||||
"Optimize URLs": "URLの最適化",
|
||||
"Maximum Time (Seconds)": "最大時間 (秒)",
|
||||
"Follow Pagination Links": "ページネーションリンクをフォローする",
|
||||
"Scroll Within": "スクロール範囲内",
|
||||
"How to Load More Content": "さらにコンテンツを読み込む方法",
|
||||
"Speed vs Accuracy": "速度と正確度",
|
||||
"Element Description": "要素の説明",
|
||||
"Click Type": "「タイプ」をクリックします。",
|
||||
"Page Analysis Scope": "ページ分析スコープ",
|
||||
"Result Selection Strategy": "結果選択戦略",
|
||||
"Partition Direction": "パーティションの方向",
|
||||
"Maximum Scan Scrolls": "最大スキャンスクロール",
|
||||
"Scan Scroll Delay (ms)": "スクロールの遅延をスキャン (ミリ秒)",
|
||||
"Overlap Percentage": "重複割合",
|
||||
"Wait for Navigation": "ナビゲーションを待つ",
|
||||
"Navigation Wait Until": "までのナビゲーション待機時間",
|
||||
"Navigation Timeout (Seconds)": "ナビゲーションタイムアウト(秒)",
|
||||
"Text to Type": "文字を入力する",
|
||||
"Clear Input Field Before Typing": "入力する前に入力フィールドをクリア",
|
||||
"Press Enter After Typing": "入力後にEnterを押します",
|
||||
"Press Tab After Typing": "入力後にタブを押す",
|
||||
"Wait for Navigation After Typing": "入力後のナビゲーションを待つ",
|
||||
"Navigation Wait Strategy": "ナビゲーション待機ストラテジー",
|
||||
"Max Scrolls (Scan Mode)": "最大スクロール (スキャンモード)",
|
||||
"Chunk Overlap (%)": "チャンクの重複 (%)",
|
||||
"Scroll Delay (ms)": "スクロール遅延 (ms)",
|
||||
"Max Credits to Spend": "使用するクレジットの最大数",
|
||||
"Max Time to Wait (Seconds)": "待機までの最大時間 (秒)",
|
||||
"File": "ファイル",
|
||||
"Session IDs": "セッションID",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"Name of a profile to load into the session.": "セッションにロードするプロファイルの名前。",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Google Web StoreからのChrome拡張IDの一覧。",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Airtop-providedプロキシを有効にします。無効にすると、カスタムプロキシを設定します。",
|
||||
"Automatically solve captcha challenges.": "Captcha チャレンジを自動的に解決します。",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "セッションが非アクティブのためにタイムアウトする期間 (1-10080分) デフォルト: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "ブラウザーの自動化に使用するアクティブなAirtopセッションを選択してください",
|
||||
"URL to open in the new window. Default: https://www.google.com": "新しいウィンドウで開くURL。デフォルト: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "ブラウザーウィンドウの寸法を修正しました。ライブビューのサイズに影響します。",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "\"widthxheight\" フォーマットのカスタム解像度(例: \"1440x900\")。上記の選択した解像度を使用する場合は空白のままにしてください。",
|
||||
"When to consider the page loaded. Default: load": "ロードされたページを考慮するタイミング。デフォルト: 読み込み",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "ページの読み込みを待つ最大時間。デフォルト: 30 秒",
|
||||
"Select a browser window within the chosen session": "選択したセッション内のブラウザウィンドウを選択します",
|
||||
"Optional ID for tracking this request": "このリクエストを追跡するための任意のID",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "スクリーンショットを返す方法。デフォルト: base64 for viewport, URL for page/scan",
|
||||
"What part of the page to capture. Default: auto": "キャプチャするページのどの部分ですか。デフォルト: 自動",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "スクリーンショットの最大の高さ。必要に応じてスケールダウンし、アスペクト比を維持します。",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "スクリーンショットの最大幅。必要に応じてスケールダウンし、アスペクト比を維持します。",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "JPEG圧縮のための画質。より高い=より良い品質。",
|
||||
"Enable advanced visual analysis features for better page processing": "より良いページ処理のために高度な視覚分析機能を有効にする",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "これ以上のコストがかかる場合はスクリーンショットを停止します。デフォルトの上限は空白のままにしてください。",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "これよりも時間がかかる場合はスクリーンショットを停止します。デフォルトのタイムアウトの場合は空白のままにしてください。",
|
||||
"The question or instruction for Airtop to answer about the current page.": "Airtopが現在のページについて答えるための質問または指示。",
|
||||
"An optional ID for your internal tracking.": "内部トラッキングの任意のID。",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "出力の構造を定義する JSON スキーマ。有効な JSON スキーマフォーマットである必要があります。",
|
||||
"Whether to include visual analysis of the page (default: auto)": "ページの視覚的な分析を含めるかどうか(デフォルト:自動)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "URLを最適化することでスクレイピングのパフォーマンスを向上させます(デフォルト:自動)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "クレジットコストがこの金額を超える場合は中止します。0に設定すると無効になります。",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "操作に時間がかかる場合は中止します。0に設定すると無効になります。",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "有効にすると、Airtopはページネーション、スクロールなどからさらにコンテンツを読み込もうとします(デフォルト:false)",
|
||||
"Optional ID to track this request on your end.": "このリクエストを追跡する任意のID。",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "抽出方法とページネーションの方法(例:「3ページをナビゲートし、タイトルと価格を抽出」)について説明します。",
|
||||
"Optional ID to track this request.": "このリクエストを追跡する任意のID。",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "スクロール可能な領域を記述してください。(例: \"結果のコンテナはページの真ん中\")。",
|
||||
"Choose how to navigate through pages (default: auto)": "ページをナビゲートする方法を選択してください(デフォルト:自動)",
|
||||
"Balance between speed and accuracy (default: auto)": "速度と精度のバランス(デフォルト:自動)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "クリックする要素を記述してください(例:「ログイン」ボタン)。",
|
||||
"The type of click to perform (default: left click).": "実行するクリックの種類 (デフォルト: 左クリック)。",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "検索するスクロール可能な領域を記述してください(例:\"メインコンテンツエリア\")。",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "視覚的に分析されるページの量 (デフォルト: auto) を制御します。",
|
||||
"How to select from multiple matches (default: auto).": "複数のマッチから選択する方法(デフォルト: auto)。",
|
||||
"How to partition screenshots for analysis (default: vertical).": "分析用のスクリーンショットを分割する方法(デフォルト:垂直)。",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "スキャンモードでのスクロールの最大数(デフォルト: 50)。",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "スキャンモードでのスクロールの間隔(デフォルト: 1000ms)。",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "スクリーンショットのチャンク間の重複率 (デフォルト: 30)。",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "クリック後にページナビゲーションが完了するのを待ちます (デフォルト: false)。",
|
||||
"When to consider navigation complete (default: load).": "ナビゲーション完了を検討するタイミング(デフォルト:負荷)",
|
||||
"Max seconds to wait for navigation (default: 30).": "ナビゲーションを待つ最大秒数(デフォルト:30)",
|
||||
"The text to type into the browser window.": "ブラウザウィンドウに入力するテキスト。",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "要素を記述します (例: \"search box\", \"username field\")。",
|
||||
"Clear the input field before typing text.": "テキストを入力する前に入力フィールドをクリアします。",
|
||||
"Press Enter key after typing text.": "テキストを入力した後、Enter キーを押します。",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "テキストを入力した後、format@@0キーを押します (両方が有効な場合は、Enterキーの後)。",
|
||||
"Wait for page navigation to complete after typing (default: false).": "入力後にページナビゲーションが完了するのを待ちます (デフォルト: false)。",
|
||||
"Max time to wait for navigation after typing (default: 30).": "入力後のナビゲーション待ちの最大時間 (デフォルト: 30)。",
|
||||
"Condition to consider navigation complete (default: load).": "ナビゲーション完了を検討する条件(デフォルト:負荷)",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "入力を見つけるために分析されるページの量 (デフォルト: auto) を制御します。",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "視覚的なチャンク間の重複率 (デフォルト: 30)。",
|
||||
"Direction to partition screenshots (default: vertical).": "パーティションスクリーンショットの方向(デフォルト:垂直)",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "スクロール可能なコンテナを記述します (例: \"table body\", \"product list\")。",
|
||||
"Optional request ID for traceability.": "トレーサビリティのためのオプションのリクエストID。",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "この制限を超えた場合はキャンセルします。0を設定すると無効になります。",
|
||||
"Cancel if exceeded. Set 0 to disable.": "超過した場合はキャンセルします。無効にするには0を設定してください。",
|
||||
"Select a file that has been uploaded to Airtop": "Airtop にアップロードされたファイルを選択",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "ファイルを利用できるようにするセッションを1つ以上選択します。すべてのセッションで利用できるようにするには空のままにします。",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "ホバーする要素を記述します。例えば、「右上にある検索ボックスの入力」です。",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "ホバリング後にページナビゲーションが完了するのを待ちます (デフォルト: false)。",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"1280x720 (Default)": "1280x720 (Default)",
|
||||
"1920x1080": "1920x1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "(Page + Assets) - デフォルト",
|
||||
"DOM Content Loaded": "DOMコンテンツがロードされました",
|
||||
"Complete (Page + Iframes)": "完成(ページ + アイフレーム)",
|
||||
"No Wait (Return Immediately)": "待機なし (すぐに戻ります)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 データ (ビューポートのデフォルト)",
|
||||
"Download URL (Default for Page/Scan)": "ダウンロードURL(ページ/スキャンのデフォルト)",
|
||||
"Auto (Recommended)": "自動 (推奨)",
|
||||
"Current View Only": "現在のビューのみ",
|
||||
"Full Page": "全ページ",
|
||||
"Scan Mode (For Problem Pages)": "スキャンモード(問題ページ用)",
|
||||
"Auto (Default)": "自動 (デフォルト)",
|
||||
"Enabled": "有効",
|
||||
"Disabled": "無効",
|
||||
"Click Next/Previous Links": "次へ/前のリンクをクリックします。",
|
||||
"Infinite Scroll": "無限スクロール",
|
||||
"Auto (Balanced)": "自動 (壁紙)",
|
||||
"More Accurate (Slower)": "より正確な(低速)",
|
||||
"Faster (Less Accurate)": "高速(精度)",
|
||||
"Left Click": "左クリック",
|
||||
"Double Click": "Double Click",
|
||||
"Right Click": "右クリック",
|
||||
"Scan Mode": "スキャンモード",
|
||||
"Auto": "自動",
|
||||
"First Match": "最初の一致",
|
||||
"Best Match": "ベストマッチ",
|
||||
"Vertical": "垂直方向",
|
||||
"Horizontal": "水平方向",
|
||||
"Bidirectional": "双方向型",
|
||||
"load": "負荷",
|
||||
"domcontentloaded": "domcontentloaded",
|
||||
"networkidle0": "networkidle0",
|
||||
"networkidle2": "networkidle2",
|
||||
"Load (Default)": "読み込み (デフォルト)",
|
||||
"Network Idle 0": "ネットワーク待機時間 0",
|
||||
"Network Idle 2": "ネットワークアイドル2",
|
||||
"Viewport Only": "ビューポートのみ",
|
||||
"Vertical (Default)": "Vertical (Default)",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\t→enter your Airtop API key. You can get your API key from [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t・\t\t\n\t\t½ **Hoe je je API-sleutel te verkrijgen:**\n\t\t・1. Ga naar het Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\tgithub2. Meld u aan op uw account\n\t\t~~3. Navigeer naar de API Keys sectie\n\t\t・4. Maak een nieuwe API sleutel of kopieer een bestaande\n\t\tľ5. Plak de key hier\n\t",
|
||||
"Create Session": "Sessie aanmaken",
|
||||
"Terminate Session": "Sessie beëindigen",
|
||||
"Create New Browser Window": "Nieuw browservenster maken",
|
||||
"Take Screenshot": "Maak Screenshot",
|
||||
"Page Query": "Pagina query",
|
||||
"Smart Scrape": "Slimme scrape",
|
||||
"Paginated Extraction": "Geïntegreerde Extractie",
|
||||
"Click": "Click",
|
||||
"Type": "Type",
|
||||
"Upload File to Sessions": "Bestand uploaden naar sessies",
|
||||
"Hover on an Element": "Beweeg op een element",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Starts a new browser session in Airtop.": "Start een nieuwe browser sessie in Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Beëindigt een bestaande browser sessie in Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Opent een nieuw venster binnen een sessie, eventueel navigeren naar een URL.",
|
||||
"Captures a screenshot of the current window.": "Maakt een schermafbeelding van het huidige venster.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Vraag een pagina aan om gegevens uit te pakken of vraag te stellen met het oog op de gegevens op de pagina.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape een pagina en retourneer de gegevens als Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Inhoud extraheren uit gepagineerde of dynamisch geladen pagina's.",
|
||||
"Execute a click interaction in a specific browser window.": "Een klik interactie uitvoeren in een specifiek browser venster.",
|
||||
"Type into a browser window at the specified field.": "Typ in een browservenster op het opgegeven veld.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Stuur een bestaand bestand naar een of meer sessies en maak het beschikbaar voor gebruik in bestandsinputs of downloads.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Verplaatst de muisaanwijzer over een element in het browservenster.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Profile Name": "Profiel Naam",
|
||||
"Extension IDs": "Extensie ID's",
|
||||
"Use Airtop Proxy?": "Airtop Proxy gebruiken?",
|
||||
"Custom Proxy Configuration": "Aangepaste Proxyconfiguratie",
|
||||
"Advanced Proxy Settings": "Geavanceerde Proxy Instellingen",
|
||||
"Solve Captcha": "Captcha oplossen",
|
||||
"Session Timeout (minutes)": "Sessie time-out (minuten)",
|
||||
"Session": "Sessie",
|
||||
"Initial URL": "Initiële URL",
|
||||
"Screen Resolution": "Schermresolutie",
|
||||
"Custom Resolution": "Aangepaste resolutie",
|
||||
"Page Load Strategy": "Pagina Laad strategie",
|
||||
"Page Load Timeout (seconds)": "Page Load Timeout (seconden)",
|
||||
"Window": "Venster",
|
||||
"Client Request ID": "Klant aanvraag ID",
|
||||
"Screenshot Format": "Schermafbeelding formaat",
|
||||
"Screenshot Scope": "Schermafbeelding Toepassing",
|
||||
"Max Height (pixels)": "Maximale hoogte (pixels)",
|
||||
"Max Width (pixels)": "Maximale breedte (pixels)",
|
||||
"JPEG Quality (1-100)": "JPEG kwaliteit (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Geavanceerde Visuele Analyse Inschakelen",
|
||||
"Visual Analysis Settings": "Visuele Analyse Instellingen",
|
||||
"Maximum Credits to Spend": "Maximum te besteden credits",
|
||||
"Maximum Time (seconds)": "Maximale tijd (seconden)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Uitvoer Schema (JSON)",
|
||||
"Visual Analysis": "Visuele analyse",
|
||||
"Optimize URLs": "Optimaliseer URLs",
|
||||
"Maximum Time (Seconds)": "Maximale tijd (seconden)",
|
||||
"Follow Pagination Links": "Volg paginering links",
|
||||
"Scroll Within": "Scroll naar binnen",
|
||||
"How to Load More Content": "Hoe meer inhoud laden",
|
||||
"Speed vs Accuracy": "Snelheid vs nauwkeurigheid",
|
||||
"Element Description": "Beschrijving element",
|
||||
"Click Type": "Klik op Type",
|
||||
"Page Analysis Scope": "Pagina Analyse Scope",
|
||||
"Result Selection Strategy": "Resultaat selectie strategie",
|
||||
"Partition Direction": "Richting partitie",
|
||||
"Maximum Scan Scrolls": "Maximale Scan Scrolls",
|
||||
"Scan Scroll Delay (ms)": "Scan Scroll Vertraging (ms)",
|
||||
"Overlap Percentage": "Overlap Percentage",
|
||||
"Wait for Navigation": "Wachten op navigatie",
|
||||
"Navigation Wait Until": "Navigatie Wacht tot",
|
||||
"Navigation Timeout (Seconds)": "Navigatie time-out (seconden)",
|
||||
"Text to Type": "Tekst om te typen",
|
||||
"Clear Input Field Before Typing": "Leeg invoerveld voor typen",
|
||||
"Press Enter After Typing": "Druk op Enter na typen",
|
||||
"Press Tab After Typing": "Druk op Tab Na het typen",
|
||||
"Wait for Navigation After Typing": "Wacht op navigatie na het typen",
|
||||
"Navigation Wait Strategy": "Navigatie wachtstrategie",
|
||||
"Max Scrolls (Scan Mode)": "Max Scrollen (Kan Modus)",
|
||||
"Chunk Overlap (%)": "Chunk Overzicht (%)",
|
||||
"Scroll Delay (ms)": "Scroll Vertraging (ms)",
|
||||
"Max Credits to Spend": "Max credits om te besteden",
|
||||
"Max Time to Wait (Seconds)": "Max Tijd tot Wacht (seconden)",
|
||||
"File": "Bestand",
|
||||
"Session IDs": "Sessie ID's",
|
||||
"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)",
|
||||
"Name of a profile to load into the session.": "Naam van een profiel om te laden in de sessie.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Lijst van Chrome-extensie ID's van Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Schakel Airtop-provided proxy in. Indien uitgeschakeld, configureer een aangepaste proxy.",
|
||||
"Automatically solve captcha challenges.": "Captcha automatisch oplossen.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "Hoe lang voordat de sessie verloopt vanwege inactiviteit (1-10080 minuten). Standaard: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Selecteer een actieve Airtop sessie om te gebruiken voor browser automatisering",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL om te openen in het nieuwe venster. Standaard: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Vaste afmetingen voor het browservenster. Van invloed is de live weergavegrootte.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Aangepaste resolutie in formaat \"widthxheight\" (bijv. \"1440x900\"). Laat leeg om de geselecteerde resolutie hierboven te gebruiken.",
|
||||
"When to consider the page loaded. Default: load": "Wanneer de pagina wordt bekeken. Standaard: laden",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Maximale tijd om te wachten voor het laden van pagina. Standaard: 30 seconden",
|
||||
"Select a browser window within the chosen session": "Selecteer een browservenster binnen de gekozen sessie",
|
||||
"Optional ID for tracking this request": "Optionele ID voor het bijhouden van dit verzoek",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "Hoe de schermafbeelding terug te geven. Standaard: base64 voor viewport, url voor pagina/scan",
|
||||
"What part of the page to capture. Default: auto": "Welk deel van de op te nemen pagina. Standaard: automatisch",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximale hoogte van schermafbeelding. Wordt indien nodig naar beneden geschaald en de hoogteverhouding bewaren.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximale breedte van schermafbeelding. Wordt indien nodig verkleind en de hoogte-breedteverhouding bewaren.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Afbeeldingskwaliteit voor JPEG compressie. Hoger = betere kwaliteit. Opmerking: Functie in ontwikkeling.",
|
||||
"Enable advanced visual analysis features for better page processing": "Schakel geavanceerde visuele analyse-functies in voor een betere pagina-verwerking",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Stop schermafbeelding als het meer dan dit kost. Laat leeg voor de standaard limiet.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Screenshot stoppen als het langer duurt dan dit. Laat leeg voor de standaard time-out.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "De vraag of instructie voor Airtop om te antwoorden over de huidige pagina.",
|
||||
"An optional ID for your internal tracking.": "Een optionele ID voor uw interne tracking.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "JSON-schema dat de structuur van de output definieert. Moet een geldig JSON-schema formaat zijn.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Of de visuele analyse van de pagina moet worden opgenomen (standaard: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Betere scraping prestaties door het optimaliseren van URL's (standaard: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Afbreken als de kredietkosten dit bedrag overschrijden. Stel in op 0 om uit te schakelen.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Afbreken als de bewerking langer duurt dan deze. Zet op 0 om uit te schakelen.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "Indien ingeschakeld, zal Airtop proberen meer inhoud te laden vanuit paginering, scrolling, etc. (standaard: false)",
|
||||
"Optional ID to track this request on your end.": "Optionele ID om dit verzoek op uw einde te volgen.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instructies over wat moet worden uitgepakt en hoe te pagineren (bijvoorbeeld \"Navigeer door 3 pagina's en extracten van titels en prijzen\").",
|
||||
"Optional ID to track this request.": "Optionele ID om dit verzoek te volgen.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Beschrijf het scrollbare gebied (bijvoorbeeld \"resultaten container in het midden van de pagina\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Kies hoe te navigeren door pagina's (standaard: auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Saldo tussen snelheid en nauwkeurigheid (standaard: auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Beschrijf het te klikken element (bv. de \"Login knop\").",
|
||||
"The type of click to perform (default: left click).": "Het type klik om uit te voeren (standaard: linker klik).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Beschrijf het te zoeken gebied (bijv. \"hoofdgebied van de inhoud\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Bepaalt hoeveel van de pagina visueel wordt geanalyseerd (standaard: auto).",
|
||||
"How to select from multiple matches (default: auto).": "Hoe te selecteren uit meerdere overeenkomsten (standaard: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "Hoe screenshots te partiteren voor analyse (standaard: verticaal).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Maximum aantal scrolls in scanmodus (standaard: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Vertraging tussen scrolls in scanmodus (standaard: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Percentage overlap tussen schermafbeelding chunks (standaard: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Wacht tot pagina navigatie is voltooid na het klikken (standaard: false).",
|
||||
"When to consider navigation complete (default: load).": "Wanneer om de navigatie compleet te overwegen (standaard: laden).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Max seconden wachten op navigatie (standaard: 30).",
|
||||
"The text to type into the browser window.": "De tekst om in te typen in het browservenster.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Beschrijf het element (bijv. \"zoekveld\", \"gebruikersnaam veld\").",
|
||||
"Clear the input field before typing text.": "Wis het invoerveld voor het typen van tekst.",
|
||||
"Press Enter key after typing text.": "Druk op Enter toets na het typen van tekst.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Druk op Tab toets na het typen van tekst (na Enter indien beide ingeschakeld).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Wacht tot pagina navigatie compleet is na het typen (standaard: false).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Max tijd om te wachten op navigatie na het typen (standaard: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Voorwaarde om de navigatie volledig te overwegen (standaard: laden).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Bepaalt hoeveel van de pagina wordt geanalyseerd om de invoer te vinden (standaard: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Percentage van overlap tussen visuele segmenten (standaard: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Richting naar partitie schermafbeeldingen (standaard: verticaal).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Beschrijf de scrollbare container (bijv. \"tabelbody\", \"productlijst\").",
|
||||
"Optional request ID for traceability.": "Optionele aanvraag ID voor traceerbaarheid.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Annuleren als deze limiet wordt overschreden. Stel 0 in om uit te schakelen.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Annuleren indien overschreden. Stel 0 in om uit te schakelen.",
|
||||
"Select a file that has been uploaded to Airtop": "Selecteer een bestand dat is geüpload naar Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Selecteer een of meer sessies om het bestand beschikbaar te maken. Laat leeg om beschikbaar te maken voor alle sessies.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Beschrijf het element als hover, bijvoorbeeld \"het zoekvak invoer in de rechterbovenhoek\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Wacht tot de pagina navigatie compleet is na de muis (standaard: false).",
|
||||
"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..",
|
||||
"1280x720 (Default)": "1280x720 (standaard)",
|
||||
"1920x1080": "1920x1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Laden (Pagina + Assets) - Standaard",
|
||||
"DOM Content Loaded": "DOM-inhoud geladen",
|
||||
"Complete (Page + Iframes)": "Voltooi (Page + Iframes)",
|
||||
"No Wait (Return Immediately)": "Geen Wachten (Retourneer Onmiddellijk)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 gegevens (Standaard voor Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "Download URL (Standaard voor Page/Scann)",
|
||||
"Auto (Recommended)": "Auto (Aanbevolen)",
|
||||
"Current View Only": "Alleen huidige weergave",
|
||||
"Full Page": "Volledige pagina",
|
||||
"Scan Mode (For Problem Pages)": "Scan Mode (Voor Probleem Pagina's)",
|
||||
"Auto (Default)": "Automatisch (standaard)",
|
||||
"Enabled": "Ingeschakeld",
|
||||
"Disabled": "Uitgeschakeld",
|
||||
"Click Next/Previous Links": "Klik op volgende/vorige links",
|
||||
"Infinite Scroll": "Oneindige boekrol",
|
||||
"Auto (Balanced)": "Automatisch (Saldo)",
|
||||
"More Accurate (Slower)": "Meer Nauwkeurig (langzamer)",
|
||||
"Faster (Less Accurate)": "Sneller (minder)",
|
||||
"Left Click": "Klik links",
|
||||
"Double Click": "Dubbele Klik",
|
||||
"Right Click": "Klik met rechts",
|
||||
"Scan Mode": "Scan Modus",
|
||||
"Auto": "Automatisch",
|
||||
"First Match": "Eerste overeenkomst",
|
||||
"Best Match": "Beste overeenkomst",
|
||||
"Vertical": "Verticaal",
|
||||
"Horizontal": "Horizontaal",
|
||||
"Bidirectional": "Bidirectioneel",
|
||||
"load": "laden",
|
||||
"domcontentloaded": "domcontentload",
|
||||
"networkidle0": "netwerk0",
|
||||
"networkidle2": "netwerk2",
|
||||
"Load (Default)": "Laden (standaard)",
|
||||
"Network Idle 0": "Netwerk Idle 0",
|
||||
"Network Idle 2": "Netwerk Idle 2",
|
||||
"Viewport Only": "Alleen bekijken",
|
||||
"Vertical (Default)": "Verticaal (standaard)",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\t『Digite sua chave de API Airtop. Você pode obter sua chave de API no [Painel do Airtop](https://portal.airtop.ai/api-keys).\n\t\t├\t\t\n\t\t├**Como obter a sua chave de API:**\n\t\t├1. Acesse o [Painel do Airtop](https://portal.airtop.ai/api-keys)\n\t\t£2. Faça login na sua conta\n\t\t├3. Navegue para a seção Chaves de API\n\t\t£4. Crie uma nova chave de API ou copie uma já existente\n\t\t£5. Cole a chave aqui\n\t",
|
||||
"Create Session": "Criar sessão",
|
||||
"Terminate Session": "Terminar sessão",
|
||||
"Create New Browser Window": "Criar nova janela do navegador",
|
||||
"Take Screenshot": "Tirar Screenshot",
|
||||
"Page Query": "Consulta de Página",
|
||||
"Smart Scrape": "Scrape Inteligente",
|
||||
"Paginated Extraction": "Extração Paginada",
|
||||
"Click": "Click",
|
||||
"Type": "tipo",
|
||||
"Upload File to Sessions": "Enviar Arquivo para Sessões",
|
||||
"Hover on an Element": "Passe o mouse sobre um elemento",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Starts a new browser session in Airtop.": "Inicia uma nova sessão de navegador no Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Termina uma sessão do navegador existente no Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Abre uma nova janela dentro de uma sessão, opcionalmente navegando para uma URL.",
|
||||
"Captures a screenshot of the current window.": "Captura uma captura de tela da janela atual.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Consulte uma página para extrair dados ou fazer uma pergunta dados dados na página.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape uma página e devolve os dados como Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extraia conteúdo de páginas paginadas ou carregadas dinamicamente.",
|
||||
"Execute a click interaction in a specific browser window.": "Executar uma interação de um clique em uma janela específica do navegador.",
|
||||
"Type into a browser window at the specified field.": "Digite em uma janela do navegador no campo especificado.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Faça push de um arquivo existente para uma ou mais sessões, disponibilizando-o para uso em entradas de arquivo ou downloads.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Move o mouse sobre um elemento na janela do navegador.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Profile Name": "Nome do perfil",
|
||||
"Extension IDs": "IDs de extensão",
|
||||
"Use Airtop Proxy?": "Usar o Airtop Proxy?",
|
||||
"Custom Proxy Configuration": "Configuração de proxy personalizado",
|
||||
"Advanced Proxy Settings": "Configurações avançadas de Proxy",
|
||||
"Solve Captcha": "Resolver Captcha",
|
||||
"Session Timeout (minutes)": "Tempo limite da sessão (minutos)",
|
||||
"Session": "Sessão",
|
||||
"Initial URL": "URL inicial",
|
||||
"Screen Resolution": "Resolução da tela",
|
||||
"Custom Resolution": "Resolução Personalizada",
|
||||
"Page Load Strategy": "Carga da Página",
|
||||
"Page Load Timeout (seconds)": "Tempo limite de carregamento da página (segundos)",
|
||||
"Window": "Janela",
|
||||
"Client Request ID": "ID de Requisição de Cliente",
|
||||
"Screenshot Format": "Formato de Screenshot",
|
||||
"Screenshot Scope": "Captura de tela",
|
||||
"Max Height (pixels)": "Altura Máxima (pixels)",
|
||||
"Max Width (pixels)": "Largura máxima (pixels)",
|
||||
"JPEG Quality (1-100)": "Qualidade JPEG (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Ativar análise visual avançada",
|
||||
"Visual Analysis Settings": "Configurações de análise visual",
|
||||
"Maximum Credits to Spend": "Máximo de Créditos para Gastar",
|
||||
"Maximum Time (seconds)": "Tempo máximo (segundos)",
|
||||
"Prompt": "Aviso",
|
||||
"Output Schema (JSON)": "Esquema de saída (JSON)",
|
||||
"Visual Analysis": "Análise visual",
|
||||
"Optimize URLs": "Otimizar URLs",
|
||||
"Maximum Time (Seconds)": "Tempo máximo (segundos)",
|
||||
"Follow Pagination Links": "Seguir links de paginação",
|
||||
"Scroll Within": "Rolar Dentro",
|
||||
"How to Load More Content": "Como carregar mais conteúdo",
|
||||
"Speed vs Accuracy": "Velocidade vs Precisão",
|
||||
"Element Description": "Descrição do Elemento",
|
||||
"Click Type": "Tipo de Clique",
|
||||
"Page Analysis Scope": "Escopo Análise da Página",
|
||||
"Result Selection Strategy": "Estratégia de Seleção de Resultados",
|
||||
"Partition Direction": "Direção de partição",
|
||||
"Maximum Scan Scrolls": "Rolagem máxima de escaneamento",
|
||||
"Scan Scroll Delay (ms)": "Atraso de rolagem de escaneamento (ms)",
|
||||
"Overlap Percentage": "Percentagem de sobreposição",
|
||||
"Wait for Navigation": "Esperar por Navegação",
|
||||
"Navigation Wait Until": "Esperar por Navegação Até",
|
||||
"Navigation Timeout (Seconds)": "Timeout de Navegação (Segundos)",
|
||||
"Text to Type": "Texto para Tipo",
|
||||
"Clear Input Field Before Typing": "Limpar Campo de Entrada Antes de Digitar",
|
||||
"Press Enter After Typing": "Pressione Enter Após Digitar",
|
||||
"Press Tab After Typing": "Pressione Tab Após Digitar",
|
||||
"Wait for Navigation After Typing": "Esperar por Navegação Após Digitar",
|
||||
"Navigation Wait Strategy": "Estratégia de Espera de Navegação",
|
||||
"Max Scrolls (Scan Mode)": "Máximo de rolagens (Modo pode)",
|
||||
"Chunk Overlap (%)": "Sobreposição de Pedaço (%)",
|
||||
"Scroll Delay (ms)": "Atraso de rolagem (ms)",
|
||||
"Max Credits to Spend": "Máximo de Créditos para Gastar",
|
||||
"Max Time to Wait (Seconds)": "Tempo máximo de espera (segundos)",
|
||||
"File": "Arquivo",
|
||||
"Session IDs": "IDs de sessão",
|
||||
"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)",
|
||||
"Name of a profile to load into the session.": "Nome de um perfil para carregar na sessão.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Lista de IDs de extensões do Chrome do Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Ativa o proxy fornecido pelo Airtop. Se desativado, configure um proxy personalizado.",
|
||||
"Automatically solve captcha challenges.": "Automaticamente resolva desafios de captcha.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "Quanto tempo antes do tempo limite da sessão por inatividade (1-10080 minutos). Padrão: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Selecione uma sessão do Airtop ativa para automação do navegador",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL para abrir na nova janela. Padrão: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Dimensões fixas para a janela do navegador. Afeta tamanho de visualização ao vivo.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Resolução personalizada no formato \"widthxheight\" (ex: \"1440x900\"). Deixe em branco para usar a resolução selecionada acima.",
|
||||
"When to consider the page loaded. Default: load": "Quando considerar a página carregada. Padrão: carregar",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Tempo máximo de espera para carregamento da página. Padrão: 30 segundos",
|
||||
"Select a browser window within the chosen session": "Selecione uma janela do navegador na sessão escolhida",
|
||||
"Optional ID for tracking this request": "ID opcional para rastrear este pedido",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "Como devolver a captura de tela. Padrão: base64 para viewport, url para página/escanear",
|
||||
"What part of the page to capture. Default: auto": "Qual parte da página a capturar. Padrão: auto",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Altura máxima da captura de tela. Redimensionará se necessário, preservando proporção de aspecto.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Largura máxima da captura de tela. Redimensionará se necessário, preservando proporção de aspecto.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Qualidade de imagem para compressão JPEG. Maior = melhor qualidade. Nota: Recurso em desenvolvimento.",
|
||||
"Enable advanced visual analysis features for better page processing": "Ativar recursos avançados de análise visual para melhor processamento de página",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Parar captura de tela se isso custar mais do que esta. Deixe em branco para o limite padrão.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Interromper a captura de tela se demorar mais do que este. Deixe em branco para o tempo limite padrão.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "A pergunta ou instrução para o Airtop para responder sobre a página atual.",
|
||||
"An optional ID for your internal tracking.": "Um ID opcional para seu rastreamento interno.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "O esquema JSON que define a estrutura da saída. Deve ser um formato de esquema JSON válido.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Se deve incluir a análise visual da página (padrão: automático)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Melhore o desempenho do scraping otimizando URLs (padrão: automático)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Abortar se o custo de crédito exceder este valor. Defina como 0 para desativar.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Abortar se a operação demorar mais do que isso. Ajuste para 0 para desativar.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "Se ativado, o Airtop tentará carregar mais conteúdo da paginação, rolagem, etc. (padrão: falso)",
|
||||
"Optional ID to track this request on your end.": "ID opcional para acompanhar esta requisição no seu lado.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instruções sobre o que extrair e como paginar (por exemplo, \"Navegar por 3 páginas e extrair títulos e preços\").",
|
||||
"Optional ID to track this request.": "ID opcional para acompanhar esta solicitação.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Descreva a área de rolagem (por exemplo, \"resultados do contêiner no meio da página\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Escolha como navegar através de páginas (padrão: automático)",
|
||||
"Balance between speed and accuracy (default: auto)": "Saldo entre a velocidade e precisão (padrão: automático)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Descrever o elemento para clicar (por exemplo, \"Botão de login\").",
|
||||
"The type of click to perform (default: left click).": "O tipo de clique para executar (padrão: clique com o esquerdo).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Descreva a área de rolagem a ser pesquisada dentro (por exemplo, \"a área principal de conteúdo\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Controla quanto da página é visualmente analisada (padrão: automática).",
|
||||
"How to select from multiple matches (default: auto).": "Como selecionar de várias correspondências (padrão: automático).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "Como dividir capturas de tela para análise (padrão: vertical).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Número máximo de rolagens no modo de varredura (padrão: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Atraso entre as rolagens no modo de varredura (padrão: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Porcentagem de sobreposição entre blocos de captura de tela (padrão: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Aguarde a conclusão da navegação da página após clicar (padrão: falso).",
|
||||
"When to consider navigation complete (default: load).": "Quando considerar a navegação concluída (padrão: carregar).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Máximo de segundos para esperar pela navegação (padrão: 30).",
|
||||
"The text to type into the browser window.": "O texto para digitar na janela do navegador.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Descreva o elemento (por exemplo, \"caixa de pesquisa\", \"campo de usuário\").",
|
||||
"Clear the input field before typing text.": "Limpa o campo de entrada antes de digitar texto.",
|
||||
"Press Enter key after typing text.": "Pressione Enter na tecla após digitar texto.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Pressione a tecla Tab após digitar o texto (após Enter se habilitado).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Aguarde a conclusão da navegação da página após digitar (padrão: falso).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Tempo máximo de espera pela navegação após digitar (padrão: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Condição para considerar a navegação completa (padrão: carregar).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Controla quanto da página é analisada para encontrar a entrada (padrão: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Porcentagem de sobreposição entre chunks visuais (padrão: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Direção para capturas de tela (padrão: vertical).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Descrever o contêiner deslizável (por exemplo, \"corpo da tabela\", \"lista de produto\").",
|
||||
"Optional request ID for traceability.": "ID opcional da requisição de rastreabilidade.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Cancelar se este limite for excedido. Defina 0 para desativar.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Cancelar se for excedido. Defina 0 para desativar.",
|
||||
"Select a file that has been uploaded to Airtop": "Selecione um arquivo que foi enviado para o Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Selecione uma ou mais sessões para disponibilizar o arquivo. Deixe em branco para disponibilizar para todas as sessões.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Descreva o elemento para passar, por exemplo, \"a caixa de pesquisa na parte superior direita\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Aguarde a conclusão da navegação da página após o cursor (padrão: falso).",
|
||||
"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..",
|
||||
"1280x720 (Default)": "1280x720 (Padrão)",
|
||||
"1920x1080": "1920x1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Carregar (Página + Ativos) - Padrão",
|
||||
"DOM Content Loaded": "Conteúdo do DOM carregado",
|
||||
"Complete (Page + Iframes)": "Complete (Page + Iframes)",
|
||||
"No Wait (Return Immediately)": "Nenhum Espera (Retorno Imediatamente)",
|
||||
"Base64 Data (Default for Viewport)": "Dados Base 64 (padrão para Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "Baixar URL (padrão para Página/Escante)",
|
||||
"Auto (Recommended)": "Automático (recomendado)",
|
||||
"Current View Only": "Apenas Visualização Atual",
|
||||
"Full Page": "Página inteira",
|
||||
"Scan Mode (For Problem Pages)": "Modo de Escaneo (Para páginas de problemas)",
|
||||
"Auto (Default)": "Automático (Padrão)",
|
||||
"Enabled": "Ativado",
|
||||
"Disabled": "Desabilitado",
|
||||
"Click Next/Previous Links": "Clique em Links Próximo/Anterior",
|
||||
"Infinite Scroll": "Pergaminho infinito",
|
||||
"Auto (Balanced)": "Automático (Balanceado)",
|
||||
"More Accurate (Slower)": "Mais precisa (lento)",
|
||||
"Faster (Less Accurate)": "Mais Rápido (Menos Precisão)",
|
||||
"Left Click": "Clique Esquerdo",
|
||||
"Double Click": "Clique Duplo",
|
||||
"Right Click": "Clique direito",
|
||||
"Scan Mode": "Modo de Escaneo",
|
||||
"Auto": "Automático",
|
||||
"First Match": "Primeira Partida",
|
||||
"Best Match": "Melhor partida",
|
||||
"Vertical": "Vertical",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidirecional",
|
||||
"load": "carregar",
|
||||
"domcontentloaded": "domcontentcarregado",
|
||||
"networkidle0": "redeidle0",
|
||||
"networkidle2": "rede2",
|
||||
"Load (Default)": "Carregar (Padrão)",
|
||||
"Network Idle 0": "Rede ociosa 0",
|
||||
"Network Idle 2": "Rede ociosa 2",
|
||||
"Viewport Only": "Somente Visualizar",
|
||||
"Vertical (Default)": "Vertical (Padrão)",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA"
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
{
|
||||
"Airtop": "Airtop",
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t",
|
||||
"Create Session": "Создать сессию",
|
||||
"Terminate Session": "Завершить сеанс",
|
||||
"Create New Browser Window": "Создать новое окно браузера",
|
||||
"Take Screenshot": "Сделать скриншот",
|
||||
"Page Query": "Запрос страницы",
|
||||
"Smart Scrape": "Смарт-скрап",
|
||||
"Paginated Extraction": "Распакованное извлечение",
|
||||
"Click": "Click",
|
||||
"Type": "Тип",
|
||||
"Upload File to Sessions": "Загрузить файл на сессии",
|
||||
"Hover on an Element": "Наведите на элемент",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Starts a new browser session in Airtop.": "Запускает новый сеанс браузера в Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Завершает сеанс существующего браузера в Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Открывает новое окно в рамках сессии, при необходимости перейдя по ссылке.",
|
||||
"Captures a screenshot of the current window.": "Записывает скриншот текущего окна.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Запросить страницу для извлечения данных или задать вопрос на этой странице.",
|
||||
"Scrape a page and return the data as Markdown.": "Перемещает страницу и возвращает данные как Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Извлечь содержимое из страничных или динамически загруженных страниц.",
|
||||
"Execute a click interaction in a specific browser window.": "Выполнить взаимодействие клика в определенном окне браузера.",
|
||||
"Type into a browser window at the specified field.": "Ввод в окно браузера в указанное поле.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Передать существующий файл в одну или несколько сессий, делая его доступным для использования в файловых входах или загрузках.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Перемещает указатель мыши на элемент в окне браузера.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Profile Name": "Имя профиля",
|
||||
"Extension IDs": "ID расширений",
|
||||
"Use Airtop Proxy?": "Использовать прокси?",
|
||||
"Custom Proxy Configuration": "Пользовательские настройки прокси",
|
||||
"Advanced Proxy Settings": "Расширенные настройки прокси",
|
||||
"Solve Captcha": "Решить капчу",
|
||||
"Session Timeout (minutes)": "Таймаут сессии (минуты)",
|
||||
"Session": "Сессия",
|
||||
"Initial URL": "Исходный URL",
|
||||
"Screen Resolution": "Разрешение экрана",
|
||||
"Custom Resolution": "Пользовательское разрешение",
|
||||
"Page Load Strategy": "Стратегия загрузки страницы",
|
||||
"Page Load Timeout (seconds)": "Таймаут загрузки страницы (в секундах)",
|
||||
"Window": "Окно",
|
||||
"Client Request ID": "ID запроса клиента",
|
||||
"Screenshot Format": "Формат скриншота",
|
||||
"Screenshot Scope": "Область скриншота",
|
||||
"Max Height (pixels)": "Макс. высота (пикселей)",
|
||||
"Max Width (pixels)": "Макс. ширина (пикселей)",
|
||||
"JPEG Quality (1-100)": "Качество JPEG (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Включить расширенный визуальный анализ",
|
||||
"Visual Analysis Settings": "Настройки визуального анализа",
|
||||
"Maximum Credits to Spend": "Максимальное количество кредитов для траты",
|
||||
"Maximum Time (seconds)": "Максимальное время (в секундах)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Схема вывода (JSON)",
|
||||
"Visual Analysis": "Визуальный анализ",
|
||||
"Optimize URLs": "Оптимизировать URL",
|
||||
"Maximum Time (Seconds)": "Максимальное время (секунды)",
|
||||
"Follow Pagination Links": "Перейти к нумерации ссылок",
|
||||
"Scroll Within": "Прокрутка в",
|
||||
"How to Load More Content": "Как загрузить больше контента",
|
||||
"Speed vs Accuracy": "Точность скорости и точности",
|
||||
"Element Description": "Описание элемента",
|
||||
"Click Type": "Тип клика",
|
||||
"Page Analysis Scope": "Область анализа страниц",
|
||||
"Result Selection Strategy": "Стратегия выбора результата",
|
||||
"Partition Direction": "Направление раздела",
|
||||
"Maximum Scan Scrolls": "Максимальное количество прокруток",
|
||||
"Scan Scroll Delay (ms)": "Задержка прокрутки (мс)",
|
||||
"Overlap Percentage": "Процент наложения",
|
||||
"Wait for Navigation": "Подождите навигации",
|
||||
"Navigation Wait Until": "Ожидание навигации до",
|
||||
"Navigation Timeout (Seconds)": "Тайм-аут навигации (секунды)",
|
||||
"Text to Type": "Текст для типа",
|
||||
"Clear Input Field Before Typing": "Очистить входное поле перед вводом",
|
||||
"Press Enter After Typing": "Нажмите Enter после ввода",
|
||||
"Press Tab After Typing": "Нажмите Tab после ввода",
|
||||
"Wait for Navigation After Typing": "Дождитесь навигации после ввода текста",
|
||||
"Navigation Wait Strategy": "Стратегия ожидания навигации",
|
||||
"Max Scrolls (Scan Mode)": "Макс. прокрутки (режим сканирования)",
|
||||
"Chunk Overlap (%)": "Наложение чанка (%)",
|
||||
"Scroll Delay (ms)": "Задержка прокрутки (мс)",
|
||||
"Max Credits to Spend": "Макс. кредитов для траты",
|
||||
"Max Time to Wait (Seconds)": "Максимальное время ожидания (сек.)",
|
||||
"File": "Файл",
|
||||
"Session IDs": "ID сеанса",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"Name of a profile to load into the session.": "Имя профиля для загрузки в сессию.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "Список идентификаторов расширений Chrome из Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Включить прокси-сервер с Airtop. Если отключено, настройте пользовательский прокси.",
|
||||
"Automatically solve captcha challenges.": "Автоматически решать captcha вызовы.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "Как долго до перерыва сессии из-за бездействия (1-10080 минут), по умолчанию: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Выберите активный сеанс Airtop для автоматизации браузера",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL для открытия в новом окне. По умолчанию: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Фиксированные размеры для окна браузера. Влияет на размер живого просмотра.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Пользовательское разрешение в формате «widthxheight» (например, «1440x900»). Оставьте пустым, чтобы использовать выбранное разрешение выше.",
|
||||
"When to consider the page loaded. Default: load": "Когда учитывать загрузку страницы. По умолчанию: загрузка",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Максимальное время ожидания загрузки страницы. По умолчанию: 30 секунд",
|
||||
"Select a browser window within the chosen session": "Выберите окно браузера в рамках выбранной сессии",
|
||||
"Optional ID for tracking this request": "Дополнительный ID для отслеживания этого запроса",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "Как вернуть снимок экрана. По умолчанию: base64 для просмотра, url для страницы/сканирования",
|
||||
"What part of the page to capture. Default: auto": "Какая часть страницы для захвата. По умолчанию: автоматическое",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Максимальная высота скриншота. При необходимости будет уменьшаться при сохранении пропорций.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Максимальная ширина скриншота. При необходимости будет уменьшаться при сохранении пропорций.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Качество изображения для сжатия JPEG. Высокое качество = лучшее. Примечание: Функция в разработке.",
|
||||
"Enable advanced visual analysis features for better page processing": "Включить расширенные функции визуального анализа для лучшей обработки страниц",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Остановить скриншот, если он стоит больше, чем это. Оставьте пустым для стандартного ограничения.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Остановить скриншот, если он занимает больше времени. Оставьте поле пустым для тайм-аута по умолчанию.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "Вопрос или инструкция для Airtop ответить на текущую страницу.",
|
||||
"An optional ID for your internal tracking.": "Необязательный идентификатор для вашего внутреннего слежения.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "Схема JSON, определяющая структуру выходной информации. Должен быть корректным форматом схемы JSON.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Включить визуальный анализ страницы (по умолчанию: авто)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Улучшить производительность scraping путем оптимизации URL (по умолчанию: авто)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Прервать, если стоимость кредита превышает указанную сумму. Установите в 0, чтобы отключить.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Прервать, если операция занимает больше времени. Установите значение 0 для отключения.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "Если включено, Airtop попытается загрузить больше содержимого из пагинации, прокрутки и т. д. (по умолчанию: false)",
|
||||
"Optional ID to track this request on your end.": "Необязательный идентификатор для отслеживания этого запроса в вашем конце.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Инструкции о том, что извлекать и как печатать (например \"Перейдите через 3 страницы и извлеките заголовки и цены\").",
|
||||
"Optional ID to track this request.": "Необязательный ID для отслеживания этого запроса.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Опишите область прокрутки (например, «контейнер результатов посередине страницы»).",
|
||||
"Choose how to navigate through pages (default: auto)": "Выберите способ навигации по страницам (по умолчанию: авто)",
|
||||
"Balance between speed and accuracy (default: auto)": "Баланс между скоростью и точностью (по умолчанию: авто)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Опишите элемент для нажатия (например, \"Кнопка входа\").",
|
||||
"The type of click to perform (default: left click).": "Тип клика для выполнения (по умолчанию: левый клик).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Опишите область прокрутки для поиска внутри (например, \"основная область содержимого\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Определяет, сколько страниц анализируется визуально (по умолчанию: авто).",
|
||||
"How to select from multiple matches (default: auto).": "Как выбрать из нескольких совпадений (по умолчанию: авто).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "Как разметить скриншоты для анализа (по умолчанию: вертикальный).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Максимальное количество прокрутки в режиме сканирования (по умолчанию: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Задержка между прокруткой в режиме сканирования (по умолчанию: 1000мс).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Процент перекрытия между чанками скриншота (по умолчанию: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Дождитесь завершения навигации по странице после нажатия (по умолчанию: false).",
|
||||
"When to consider navigation complete (default: load).": "Когда рассматривать навигацию завершенной (по умолчанию: загрузка).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Максимум секунд ожидания навигации (по умолчанию: 30).",
|
||||
"The text to type into the browser window.": "Текст для ввода в окне браузера.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Опишите элемент (например, \"search box\", \"username field\").",
|
||||
"Clear the input field before typing text.": "Очистите поле ввода перед вводом.",
|
||||
"Press Enter key after typing text.": "Нажмите клавишу Enter после ввода текста.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Нажмите клавишу Tab после ввода текста (после Enter, если оба включены).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Дождитесь завершения навигации по страницам после ввода текста (по умолчанию: false).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Максимальное время ожидания навигации после ввода текста (по умолчанию: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Условие для рассмотрения завершенной навигации (по умолчанию: загрузка).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Определяет, сколько страниц будет проанализировано для поиска ввода (по умолчанию: авто).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Процент перекрытия между чанками (по умолчанию: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Направление к разделу скриншоты (по умолчанию: вертикальный).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Опишите контейнер с прокруткой (например, \"table body\", \"list продуктов\").",
|
||||
"Optional request ID for traceability.": "Необязательный идентификатор запроса для трассировки.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Отменить, если этот лимит превышен. Установите 0 для отключения.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Отмена, если превышено. Установите 0 для отключения.",
|
||||
"Select a file that has been uploaded to Airtop": "Выберите файл, который был загружен в Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Выберите одну или несколько сессий, чтобы сделать файл доступным. Оставьте пустым, чтобы сделать файл доступным для всех сессий.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Опишите элемент навеса, например \"Ввод поля поиска в правом верхнем углу\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Дождитесь завершения навигации после наведения курсора (по умолчанию: false).",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"1280x720 (Default)": "1280x720 (по умолчанию)",
|
||||
"1920x1080": "1920 x 1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024 x 768",
|
||||
"800x600": "800х600",
|
||||
"Load (Page + Assets) - Default": "Загрузка страницы + активы) - по умолчанию",
|
||||
"DOM Content Loaded": "Содержимое DOM загружено",
|
||||
"Complete (Page + Iframes)": "Полная страница + Iframes)",
|
||||
"No Wait (Return Immediately)": "Нет ожидания (Немедленно (Return)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 данные (по умолчанию для просмотра)",
|
||||
"Download URL (Default for Page/Scan)": "URL загрузки (по умолчанию для страницы/сканирования)",
|
||||
"Auto (Recommended)": "Авто (рекомендуется)",
|
||||
"Current View Only": "Только текущий вид",
|
||||
"Full Page": "Полная страница",
|
||||
"Scan Mode (For Problem Pages)": "Режим сканирования (для страниц заданий)",
|
||||
"Auto (Default)": "Авто (по умолчанию)",
|
||||
"Enabled": "Включено",
|
||||
"Disabled": "Отключено",
|
||||
"Click Next/Previous Links": "Нажмите Далее/Предыдущие ссылки",
|
||||
"Infinite Scroll": "Бесконечная прокрутка",
|
||||
"Auto (Balanced)": "Авто (Балансирован)",
|
||||
"More Accurate (Slower)": "Больше точности (медленнее)",
|
||||
"Faster (Less Accurate)": "Быстрее (меньше точности)",
|
||||
"Left Click": "Щелчок левой кнопкой",
|
||||
"Double Click": "Двойной клик",
|
||||
"Right Click": "Правый клик",
|
||||
"Scan Mode": "Режим сканирования",
|
||||
"Auto": "Авто",
|
||||
"First Match": "Первый матч",
|
||||
"Best Match": "Лучший матч",
|
||||
"Vertical": "Вертикальный",
|
||||
"Horizontal": "Горизонтально",
|
||||
"Bidirectional": "Двунаправленный",
|
||||
"load": "нагрузка",
|
||||
"domcontentloaded": "domcontent: загружен",
|
||||
"networkidle0": "сетевой сервер0",
|
||||
"networkidle2": "сетевой сервер2",
|
||||
"Load (Default)": "Загрузить (по умолчанию)",
|
||||
"Network Idle 0": "Отсутствие сети 0",
|
||||
"Network Idle 2": "Отсутствие сети 2",
|
||||
"Viewport Only": "Только просмотр",
|
||||
"Vertical (Default)": "Вертикальный (по умолчанию)",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t",
|
||||
"Create Session": "Create Session",
|
||||
"Terminate Session": "Terminate Session",
|
||||
"Create New Browser Window": "Create New Browser Window",
|
||||
"Take Screenshot": "Take Screenshot",
|
||||
"Page Query": "Page Query",
|
||||
"Smart Scrape": "Smart Scrape",
|
||||
"Paginated Extraction": "Paginated Extraction",
|
||||
"Click": "Click",
|
||||
"Type": "Type",
|
||||
"Upload File to Sessions": "Upload File to Sessions",
|
||||
"Hover on an Element": "Hover on an Element",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Starts a new browser session in Airtop.": "Starts a new browser session in Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Ends an existing browser session in Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Opens a new window within a session, optionally navigating to a URL.",
|
||||
"Captures a screenshot of the current window.": "Captures a screenshot of the current window.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Query a page to extract data or ask a question given the data on the page.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape a page and return the data as Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extract content from paginated or dynamically loaded pages.",
|
||||
"Execute a click interaction in a specific browser window.": "Execute a click interaction in a specific browser window.",
|
||||
"Type into a browser window at the specified field.": "Type into a browser window at the specified field.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Push an existing file to one or more sessions, making it available for use in file inputs or downloads.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Moves mouse pointer over an element in the browser window.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Profile Name": "Profile Name",
|
||||
"Extension IDs": "Extension IDs",
|
||||
"Use Airtop Proxy?": "Use Airtop Proxy?",
|
||||
"Custom Proxy Configuration": "Custom Proxy Configuration",
|
||||
"Advanced Proxy Settings": "Advanced Proxy Settings",
|
||||
"Solve Captcha": "Solve Captcha",
|
||||
"Session Timeout (minutes)": "Session Timeout (minutes)",
|
||||
"Session": "Session",
|
||||
"Initial URL": "Initial URL",
|
||||
"Screen Resolution": "Screen Resolution",
|
||||
"Custom Resolution": "Custom Resolution",
|
||||
"Page Load Strategy": "Page Load Strategy",
|
||||
"Page Load Timeout (seconds)": "Page Load Timeout (seconds)",
|
||||
"Window": "Window",
|
||||
"Client Request ID": "Client Request ID",
|
||||
"Screenshot Format": "Screenshot Format",
|
||||
"Screenshot Scope": "Screenshot Scope",
|
||||
"Max Height (pixels)": "Max Height (pixels)",
|
||||
"Max Width (pixels)": "Max Width (pixels)",
|
||||
"JPEG Quality (1-100)": "JPEG Quality (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Enable Advanced Visual Analysis",
|
||||
"Visual Analysis Settings": "Visual Analysis Settings",
|
||||
"Maximum Credits to Spend": "Maximum Credits to Spend",
|
||||
"Maximum Time (seconds)": "Maximum Time (seconds)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Output Schema (JSON)",
|
||||
"Visual Analysis": "Visual Analysis",
|
||||
"Optimize URLs": "Optimize URLs",
|
||||
"Maximum Time (Seconds)": "Maximum Time (Seconds)",
|
||||
"Follow Pagination Links": "Follow Pagination Links",
|
||||
"Scroll Within": "Scroll Within",
|
||||
"How to Load More Content": "How to Load More Content",
|
||||
"Speed vs Accuracy": "Speed vs Accuracy",
|
||||
"Element Description": "Element Description",
|
||||
"Click Type": "Click Type",
|
||||
"Page Analysis Scope": "Page Analysis Scope",
|
||||
"Result Selection Strategy": "Result Selection Strategy",
|
||||
"Partition Direction": "Partition Direction",
|
||||
"Maximum Scan Scrolls": "Maximum Scan Scrolls",
|
||||
"Scan Scroll Delay (ms)": "Scan Scroll Delay (ms)",
|
||||
"Overlap Percentage": "Overlap Percentage",
|
||||
"Wait for Navigation": "Wait for Navigation",
|
||||
"Navigation Wait Until": "Navigation Wait Until",
|
||||
"Navigation Timeout (Seconds)": "Navigation Timeout (Seconds)",
|
||||
"Text to Type": "Text to Type",
|
||||
"Clear Input Field Before Typing": "Clear Input Field Before Typing",
|
||||
"Press Enter After Typing": "Press Enter After Typing",
|
||||
"Press Tab After Typing": "Press Tab After Typing",
|
||||
"Wait for Navigation After Typing": "Wait for Navigation After Typing",
|
||||
"Navigation Wait Strategy": "Navigation Wait Strategy",
|
||||
"Max Scrolls (Scan Mode)": "Max Scrolls (Scan Mode)",
|
||||
"Chunk Overlap (%)": "Chunk Overlap (%)",
|
||||
"Scroll Delay (ms)": "Scroll Delay (ms)",
|
||||
"Max Credits to Spend": "Max Credits to Spend",
|
||||
"Max Time to Wait (Seconds)": "Max Time to Wait (Seconds)",
|
||||
"File": "File",
|
||||
"Session IDs": "Session IDs",
|
||||
"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)",
|
||||
"Name of a profile to load into the session.": "Name of a profile to load into the session.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "List of Chrome extension IDs from Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Enable Airtop-provided proxy. If disabled, configure a custom proxy.",
|
||||
"Automatically solve captcha challenges.": "Automatically solve captcha challenges.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "How long before the session times out due to inactivity (1-10080 minutes). Default: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Select an active Airtop session to use for browser automation",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL to open in the new window. Default: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Fixed dimensions for the browser window. Affects live view size.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.",
|
||||
"When to consider the page loaded. Default: load": "When to consider the page loaded. Default: load",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Maximum time to wait for page loading. Default: 30 seconds",
|
||||
"Select a browser window within the chosen session": "Select a browser window within the chosen session",
|
||||
"Optional ID for tracking this request": "Optional ID for tracking this request",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "How to return the screenshot. Default: base64 for viewport, url for page/scan",
|
||||
"What part of the page to capture. Default: auto": "What part of the page to capture. Default: auto",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Image quality for JPEG compression. Higher = better quality. Note: Feature in development.",
|
||||
"Enable advanced visual analysis features for better page processing": "Enable advanced visual analysis features for better page processing",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Stop screenshot if it costs more than this. Leave blank for default limit.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Stop screenshot if it takes longer than this. Leave blank for default timeout.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "The question or instruction for Airtop to answer about the current page.",
|
||||
"An optional ID for your internal tracking.": "An optional ID for your internal tracking.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "JSON schema defining the structure of the output. Must be valid JSON schema format.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Whether to include visual analysis of the page (default: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Improve scraping performance by optimizing URLs (default: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Abort if the credit cost exceeds this amount. Set to 0 to disable.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Abort if the operation takes longer than this. Set to 0 to disable.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)",
|
||||
"Optional ID to track this request on your end.": "Optional ID to track this request on your end.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").",
|
||||
"Optional ID to track this request.": "Optional ID to track this request.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Describe the scrollable area (e.g. \"results container in middle of page\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Choose how to navigate through pages (default: auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Balance between speed and accuracy (default: auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Describe the element to click (e.g. \"Login button\").",
|
||||
"The type of click to perform (default: left click).": "The type of click to perform (default: left click).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Describe the scrollable area to search within (e.g. \"main content area\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Controls how much of the page is visually analyzed (default: auto).",
|
||||
"How to select from multiple matches (default: auto).": "How to select from multiple matches (default: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "How to partition screenshots for analysis (default: vertical).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Maximum number of scrolls in scan mode (default: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Delay between scrolls in scan mode (default: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Percentage of overlap between screenshot chunks (default: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Wait for page navigation to complete after clicking (default: false).",
|
||||
"When to consider navigation complete (default: load).": "When to consider navigation complete (default: load).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Max seconds to wait for navigation (default: 30).",
|
||||
"The text to type into the browser window.": "The text to type into the browser window.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Describe the element (e.g., \"search box\", \"username field\").",
|
||||
"Clear the input field before typing text.": "Clear the input field before typing text.",
|
||||
"Press Enter key after typing text.": "Press Enter key after typing text.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Press Tab key after typing text (after Enter if both enabled).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Wait for page navigation to complete after typing (default: false).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Max time to wait for navigation after typing (default: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Condition to consider navigation complete (default: load).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Controls how much of the page is analyzed to find the input (default: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Percentage of overlap between visual chunks (default: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Direction to partition screenshots (default: vertical).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Describe the scrollable container (e.g., \"table body\", \"product list\").",
|
||||
"Optional request ID for traceability.": "Optional request ID for traceability.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Cancel if this limit is exceeded. Set 0 to disable.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Cancel if exceeded. Set 0 to disable.",
|
||||
"Select a file that has been uploaded to Airtop": "Select a file that has been uploaded to Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Select one or more sessions to make the file available on. Leave empty to make available to all sessions.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Describe the element to hover, e.g. \"the search box input in the top right corner\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Wait for page navigation to complete after hovering (default: false).",
|
||||
"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..",
|
||||
"1280x720 (Default)": "1280x720 (Default)",
|
||||
"1920x1080": "1920x1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Load (Page + Assets) - Default",
|
||||
"DOM Content Loaded": "DOM Content Loaded",
|
||||
"Complete (Page + Iframes)": "Complete (Page + Iframes)",
|
||||
"No Wait (Return Immediately)": "No Wait (Return Immediately)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 Data (Default for Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "Download URL (Default for Page/Scan)",
|
||||
"Auto (Recommended)": "Auto (Recommended)",
|
||||
"Current View Only": "Current View Only",
|
||||
"Full Page": "Full Page",
|
||||
"Scan Mode (For Problem Pages)": "Scan Mode (For Problem Pages)",
|
||||
"Auto (Default)": "Auto (Default)",
|
||||
"Enabled": "Enabled",
|
||||
"Disabled": "Disabled",
|
||||
"Click Next/Previous Links": "Click Next/Previous Links",
|
||||
"Infinite Scroll": "Infinite Scroll",
|
||||
"Auto (Balanced)": "Auto (Balanced)",
|
||||
"More Accurate (Slower)": "More Accurate (Slower)",
|
||||
"Faster (Less Accurate)": "Faster (Less Accurate)",
|
||||
"Left Click": "Left Click",
|
||||
"Double Click": "Double Click",
|
||||
"Right Click": "Right Click",
|
||||
"Scan Mode": "Scan Mode",
|
||||
"Auto": "Auto",
|
||||
"First Match": "First Match",
|
||||
"Best Match": "Best Match",
|
||||
"Vertical": "Vertical",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidirectional",
|
||||
"load": "load",
|
||||
"domcontentloaded": "domcontentloaded",
|
||||
"networkidle0": "networkidle0",
|
||||
"networkidle2": "networkidle2",
|
||||
"Load (Default)": "Load (Default)",
|
||||
"Network Idle 0": "Network Idle 0",
|
||||
"Network Idle 2": "Network Idle 2",
|
||||
"Viewport Only": "Viewport Only",
|
||||
"Vertical (Default)": "Vertical (Default)",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
{
|
||||
"Airtop": "Airtop",
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t",
|
||||
"Create Session": "Create Session",
|
||||
"Terminate Session": "Terminate Session",
|
||||
"Create New Browser Window": "Create New Browser Window",
|
||||
"Take Screenshot": "Take Screenshot",
|
||||
"Page Query": "Page Query",
|
||||
"Smart Scrape": "Smart Scrape",
|
||||
"Paginated Extraction": "Paginated Extraction",
|
||||
"Click": "Click",
|
||||
"Type": "Type",
|
||||
"Upload File to Sessions": "Upload File to Sessions",
|
||||
"Hover on an Element": "Hover on an Element",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Starts a new browser session in Airtop.": "Starts a new browser session in Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Ends an existing browser session in Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Opens a new window within a session, optionally navigating to a URL.",
|
||||
"Captures a screenshot of the current window.": "Captures a screenshot of the current window.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Query a page to extract data or ask a question given the data on the page.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape a page and return the data as Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extract content from paginated or dynamically loaded pages.",
|
||||
"Execute a click interaction in a specific browser window.": "Execute a click interaction in a specific browser window.",
|
||||
"Type into a browser window at the specified field.": "Type into a browser window at the specified field.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Push an existing file to one or more sessions, making it available for use in file inputs or downloads.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Moves mouse pointer over an element in the browser window.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Profile Name": "Profile Name",
|
||||
"Extension IDs": "Extension IDs",
|
||||
"Use Airtop Proxy?": "Use Airtop Proxy?",
|
||||
"Custom Proxy Configuration": "Custom Proxy Configuration",
|
||||
"Advanced Proxy Settings": "Advanced Proxy Settings",
|
||||
"Solve Captcha": "Solve Captcha",
|
||||
"Session Timeout (minutes)": "Session Timeout (minutes)",
|
||||
"Session": "Session",
|
||||
"Initial URL": "Initial URL",
|
||||
"Screen Resolution": "Screen Resolution",
|
||||
"Custom Resolution": "Custom Resolution",
|
||||
"Page Load Strategy": "Page Load Strategy",
|
||||
"Page Load Timeout (seconds)": "Page Load Timeout (seconds)",
|
||||
"Window": "Window",
|
||||
"Client Request ID": "Client Request ID",
|
||||
"Screenshot Format": "Screenshot Format",
|
||||
"Screenshot Scope": "Screenshot Scope",
|
||||
"Max Height (pixels)": "Max Height (pixels)",
|
||||
"Max Width (pixels)": "Max Width (pixels)",
|
||||
"JPEG Quality (1-100)": "JPEG Quality (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Enable Advanced Visual Analysis",
|
||||
"Visual Analysis Settings": "Visual Analysis Settings",
|
||||
"Maximum Credits to Spend": "Maximum Credits to Spend",
|
||||
"Maximum Time (seconds)": "Maximum Time (seconds)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Output Schema (JSON)",
|
||||
"Visual Analysis": "Visual Analysis",
|
||||
"Optimize URLs": "Optimize URLs",
|
||||
"Maximum Time (Seconds)": "Maximum Time (Seconds)",
|
||||
"Follow Pagination Links": "Follow Pagination Links",
|
||||
"Scroll Within": "Scroll Within",
|
||||
"How to Load More Content": "How to Load More Content",
|
||||
"Speed vs Accuracy": "Speed vs Accuracy",
|
||||
"Element Description": "Element Description",
|
||||
"Click Type": "Click Type",
|
||||
"Page Analysis Scope": "Page Analysis Scope",
|
||||
"Result Selection Strategy": "Result Selection Strategy",
|
||||
"Partition Direction": "Partition Direction",
|
||||
"Maximum Scan Scrolls": "Maximum Scan Scrolls",
|
||||
"Scan Scroll Delay (ms)": "Scan Scroll Delay (ms)",
|
||||
"Overlap Percentage": "Overlap Percentage",
|
||||
"Wait for Navigation": "Wait for Navigation",
|
||||
"Navigation Wait Until": "Navigation Wait Until",
|
||||
"Navigation Timeout (Seconds)": "Navigation Timeout (Seconds)",
|
||||
"Text to Type": "Text to Type",
|
||||
"Clear Input Field Before Typing": "Clear Input Field Before Typing",
|
||||
"Press Enter After Typing": "Press Enter After Typing",
|
||||
"Press Tab After Typing": "Press Tab After Typing",
|
||||
"Wait for Navigation After Typing": "Wait for Navigation After Typing",
|
||||
"Navigation Wait Strategy": "Navigation Wait Strategy",
|
||||
"Max Scrolls (Scan Mode)": "Max Scrolls (Scan Mode)",
|
||||
"Chunk Overlap (%)": "Chunk Overlap (%)",
|
||||
"Scroll Delay (ms)": "Scroll Delay (ms)",
|
||||
"Max Credits to Spend": "Max Credits to Spend",
|
||||
"Max Time to Wait (Seconds)": "Max Time to Wait (Seconds)",
|
||||
"File": "File",
|
||||
"Session IDs": "Session IDs",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Name of a profile to load into the session.": "Name of a profile to load into the session.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "List of Chrome extension IDs from Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Enable Airtop-provided proxy. If disabled, configure a custom proxy.",
|
||||
"Automatically solve captcha challenges.": "Automatically solve captcha challenges.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "How long before the session times out due to inactivity (1-10080 minutes). Default: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Select an active Airtop session to use for browser automation",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL to open in the new window. Default: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Fixed dimensions for the browser window. Affects live view size.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.",
|
||||
"When to consider the page loaded. Default: load": "When to consider the page loaded. Default: load",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Maximum time to wait for page loading. Default: 30 seconds",
|
||||
"Select a browser window within the chosen session": "Select a browser window within the chosen session",
|
||||
"Optional ID for tracking this request": "Optional ID for tracking this request",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "How to return the screenshot. Default: base64 for viewport, url for page/scan",
|
||||
"What part of the page to capture. Default: auto": "What part of the page to capture. Default: auto",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Image quality for JPEG compression. Higher = better quality. Note: Feature in development.",
|
||||
"Enable advanced visual analysis features for better page processing": "Enable advanced visual analysis features for better page processing",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Stop screenshot if it costs more than this. Leave blank for default limit.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Stop screenshot if it takes longer than this. Leave blank for default timeout.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "The question or instruction for Airtop to answer about the current page.",
|
||||
"An optional ID for your internal tracking.": "An optional ID for your internal tracking.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "JSON schema defining the structure of the output. Must be valid JSON schema format.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Whether to include visual analysis of the page (default: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Improve scraping performance by optimizing URLs (default: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Abort if the credit cost exceeds this amount. Set to 0 to disable.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Abort if the operation takes longer than this. Set to 0 to disable.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)",
|
||||
"Optional ID to track this request on your end.": "Optional ID to track this request on your end.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").",
|
||||
"Optional ID to track this request.": "Optional ID to track this request.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Describe the scrollable area (e.g. \"results container in middle of page\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Choose how to navigate through pages (default: auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Balance between speed and accuracy (default: auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Describe the element to click (e.g. \"Login button\").",
|
||||
"The type of click to perform (default: left click).": "The type of click to perform (default: left click).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Describe the scrollable area to search within (e.g. \"main content area\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Controls how much of the page is visually analyzed (default: auto).",
|
||||
"How to select from multiple matches (default: auto).": "How to select from multiple matches (default: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "How to partition screenshots for analysis (default: vertical).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Maximum number of scrolls in scan mode (default: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Delay between scrolls in scan mode (default: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Percentage of overlap between screenshot chunks (default: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Wait for page navigation to complete after clicking (default: false).",
|
||||
"When to consider navigation complete (default: load).": "When to consider navigation complete (default: load).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Max seconds to wait for navigation (default: 30).",
|
||||
"The text to type into the browser window.": "The text to type into the browser window.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Describe the element (e.g., \"search box\", \"username field\").",
|
||||
"Clear the input field before typing text.": "Clear the input field before typing text.",
|
||||
"Press Enter key after typing text.": "Press Enter key after typing text.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Press Tab key after typing text (after Enter if both enabled).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Wait for page navigation to complete after typing (default: false).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Max time to wait for navigation after typing (default: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Condition to consider navigation complete (default: load).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Controls how much of the page is analyzed to find the input (default: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Percentage of overlap between visual chunks (default: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Direction to partition screenshots (default: vertical).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Describe the scrollable container (e.g., \"table body\", \"product list\").",
|
||||
"Optional request ID for traceability.": "Optional request ID for traceability.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Cancel if this limit is exceeded. Set 0 to disable.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Cancel if exceeded. Set 0 to disable.",
|
||||
"Select a file that has been uploaded to Airtop": "Select a file that has been uploaded to Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Select one or more sessions to make the file available on. Leave empty to make available to all sessions.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Describe the element to hover, e.g. \"the search box input in the top right corner\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Wait for page navigation to complete after hovering (default: false).",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"1280x720 (Default)": "1280x720 (Default)",
|
||||
"1920x1080": "1920x1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Load (Page + Assets) - Default",
|
||||
"DOM Content Loaded": "DOM Content Loaded",
|
||||
"Complete (Page + Iframes)": "Complete (Page + Iframes)",
|
||||
"No Wait (Return Immediately)": "No Wait (Return Immediately)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 Data (Default for Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "Download URL (Default for Page/Scan)",
|
||||
"Auto (Recommended)": "Auto (Recommended)",
|
||||
"Current View Only": "Current View Only",
|
||||
"Full Page": "Full Page",
|
||||
"Scan Mode (For Problem Pages)": "Scan Mode (For Problem Pages)",
|
||||
"Auto (Default)": "Auto (Default)",
|
||||
"Enabled": "Enabled",
|
||||
"Disabled": "Disabled",
|
||||
"Click Next/Previous Links": "Click Next/Previous Links",
|
||||
"Infinite Scroll": "Infinite Scroll",
|
||||
"Auto (Balanced)": "Auto (Balanced)",
|
||||
"More Accurate (Slower)": "More Accurate (Slower)",
|
||||
"Faster (Less Accurate)": "Faster (Less Accurate)",
|
||||
"Left Click": "Left Click",
|
||||
"Double Click": "Double Click",
|
||||
"Right Click": "Right Click",
|
||||
"Scan Mode": "Scan Mode",
|
||||
"Auto": "Auto",
|
||||
"First Match": "First Match",
|
||||
"Best Match": "Best Match",
|
||||
"Vertical": "Vertical",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidirectional",
|
||||
"load": "load",
|
||||
"domcontentloaded": "domcontentloaded",
|
||||
"networkidle0": "networkidle0",
|
||||
"networkidle2": "networkidle2",
|
||||
"Load (Default)": "Load (Default)",
|
||||
"Network Idle 0": "Network Idle 0",
|
||||
"Network Idle 2": "Network Idle 2",
|
||||
"Viewport Only": "Viewport Only",
|
||||
"Vertical (Default)": "Vertical (Default)",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD"
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t": "\n\t\tEnter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).\n\t\t\n\t\t**How to get your API key:**\n\t\t1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)\n\t\t2. Sign in to your account\n\t\t3. Navigate to API Keys section\n\t\t4. Create a new API key or copy an existing one\n\t\t5. Paste the key here\n\t",
|
||||
"Create Session": "Create Session",
|
||||
"Terminate Session": "Terminate Session",
|
||||
"Create New Browser Window": "Create New Browser Window",
|
||||
"Take Screenshot": "Take Screenshot",
|
||||
"Page Query": "Page Query",
|
||||
"Smart Scrape": "Smart Scrape",
|
||||
"Paginated Extraction": "Paginated Extraction",
|
||||
"Click": "Click",
|
||||
"Type": "类型",
|
||||
"Upload File to Sessions": "Upload File to Sessions",
|
||||
"Hover on an Element": "Hover on an Element",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Starts a new browser session in Airtop.": "Starts a new browser session in Airtop.",
|
||||
"Ends an existing browser session in Airtop.": "Ends an existing browser session in Airtop.",
|
||||
"Opens a new window within a session, optionally navigating to a URL.": "Opens a new window within a session, optionally navigating to a URL.",
|
||||
"Captures a screenshot of the current window.": "Captures a screenshot of the current window.",
|
||||
"Query a page to extract data or ask a question given the data on the page.": "Query a page to extract data or ask a question given the data on the page.",
|
||||
"Scrape a page and return the data as Markdown.": "Scrape a page and return the data as Markdown.",
|
||||
"Extract content from paginated or dynamically loaded pages.": "Extract content from paginated or dynamically loaded pages.",
|
||||
"Execute a click interaction in a specific browser window.": "Execute a click interaction in a specific browser window.",
|
||||
"Type into a browser window at the specified field.": "Type into a browser window at the specified field.",
|
||||
"Push an existing file to one or more sessions, making it available for use in file inputs or downloads.": "Push an existing file to one or more sessions, making it available for use in file inputs or downloads.",
|
||||
"Moves mouse pointer over an element in the browser window.": "Moves mouse pointer over an element in the browser window.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Profile Name": "Profile Name",
|
||||
"Extension IDs": "Extension IDs",
|
||||
"Use Airtop Proxy?": "Use Airtop Proxy?",
|
||||
"Custom Proxy Configuration": "Custom Proxy Configuration",
|
||||
"Advanced Proxy Settings": "Advanced Proxy Settings",
|
||||
"Solve Captcha": "Solve Captcha",
|
||||
"Session Timeout (minutes)": "Session Timeout (minutes)",
|
||||
"Session": "Session",
|
||||
"Initial URL": "Initial URL",
|
||||
"Screen Resolution": "Screen Resolution",
|
||||
"Custom Resolution": "Custom Resolution",
|
||||
"Page Load Strategy": "Page Load Strategy",
|
||||
"Page Load Timeout (seconds)": "Page Load Timeout (seconds)",
|
||||
"Window": "Window",
|
||||
"Client Request ID": "Client Request ID",
|
||||
"Screenshot Format": "Screenshot Format",
|
||||
"Screenshot Scope": "Screenshot Scope",
|
||||
"Max Height (pixels)": "Max Height (pixels)",
|
||||
"Max Width (pixels)": "Max Width (pixels)",
|
||||
"JPEG Quality (1-100)": "JPEG Quality (1-100)",
|
||||
"Enable Advanced Visual Analysis": "Enable Advanced Visual Analysis",
|
||||
"Visual Analysis Settings": "Visual Analysis Settings",
|
||||
"Maximum Credits to Spend": "Maximum Credits to Spend",
|
||||
"Maximum Time (seconds)": "Maximum Time (seconds)",
|
||||
"Prompt": "Prompt",
|
||||
"Output Schema (JSON)": "Output Schema (JSON)",
|
||||
"Visual Analysis": "Visual Analysis",
|
||||
"Optimize URLs": "Optimize URLs",
|
||||
"Maximum Time (Seconds)": "Maximum Time (Seconds)",
|
||||
"Follow Pagination Links": "Follow Pagination Links",
|
||||
"Scroll Within": "Scroll Within",
|
||||
"How to Load More Content": "How to Load More Content",
|
||||
"Speed vs Accuracy": "Speed vs Accuracy",
|
||||
"Element Description": "Element Description",
|
||||
"Click Type": "Click Type",
|
||||
"Page Analysis Scope": "Page Analysis Scope",
|
||||
"Result Selection Strategy": "Result Selection Strategy",
|
||||
"Partition Direction": "Partition Direction",
|
||||
"Maximum Scan Scrolls": "Maximum Scan Scrolls",
|
||||
"Scan Scroll Delay (ms)": "Scan Scroll Delay (ms)",
|
||||
"Overlap Percentage": "Overlap Percentage",
|
||||
"Wait for Navigation": "Wait for Navigation",
|
||||
"Navigation Wait Until": "Navigation Wait Until",
|
||||
"Navigation Timeout (Seconds)": "Navigation Timeout (Seconds)",
|
||||
"Text to Type": "Text to Type",
|
||||
"Clear Input Field Before Typing": "Clear Input Field Before Typing",
|
||||
"Press Enter After Typing": "Press Enter After Typing",
|
||||
"Press Tab After Typing": "Press Tab After Typing",
|
||||
"Wait for Navigation After Typing": "Wait for Navigation After Typing",
|
||||
"Navigation Wait Strategy": "Navigation Wait Strategy",
|
||||
"Max Scrolls (Scan Mode)": "Max Scrolls (Scan Mode)",
|
||||
"Chunk Overlap (%)": "Chunk Overlap (%)",
|
||||
"Scroll Delay (ms)": "Scroll Delay (ms)",
|
||||
"Max Credits to Spend": "Max Credits to Spend",
|
||||
"Max Time to Wait (Seconds)": "Max Time to Wait (Seconds)",
|
||||
"File": "文件",
|
||||
"Session IDs": "Session IDs",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"Name of a profile to load into the session.": "Name of a profile to load into the session.",
|
||||
"List of Chrome extension IDs from Google Web Store.": "List of Chrome extension IDs from Google Web Store.",
|
||||
"Enable Airtop-provided proxy. If disabled, configure a custom proxy.": "Enable Airtop-provided proxy. If disabled, configure a custom proxy.",
|
||||
"Automatically solve captcha challenges.": "Automatically solve captcha challenges.",
|
||||
"How long before the session times out due to inactivity (1-10080 minutes). Default: 10.": "How long before the session times out due to inactivity (1-10080 minutes). Default: 10.",
|
||||
"Select an active Airtop session to use for browser automation": "Select an active Airtop session to use for browser automation",
|
||||
"URL to open in the new window. Default: https://www.google.com": "URL to open in the new window. Default: https://www.google.com",
|
||||
"Fixed dimensions for the browser window. Affects live view size.": "Fixed dimensions for the browser window. Affects live view size.",
|
||||
"Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.": "Custom resolution in format \"widthxheight\" (e.g., \"1440x900\"). Leave blank to use selected resolution above.",
|
||||
"When to consider the page loaded. Default: load": "When to consider the page loaded. Default: load",
|
||||
"Maximum time to wait for page loading. Default: 30 seconds": "Maximum time to wait for page loading. Default: 30 seconds",
|
||||
"Select a browser window within the chosen session": "Select a browser window within the chosen session",
|
||||
"Optional ID for tracking this request": "Optional ID for tracking this request",
|
||||
"How to return the screenshot. Default: base64 for viewport, url for page/scan": "How to return the screenshot. Default: base64 for viewport, url for page/scan",
|
||||
"What part of the page to capture. Default: auto": "What part of the page to capture. Default: auto",
|
||||
"Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.",
|
||||
"Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.": "Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.",
|
||||
"Image quality for JPEG compression. Higher = better quality. Note: Feature in development.": "Image quality for JPEG compression. Higher = better quality. Note: Feature in development.",
|
||||
"Enable advanced visual analysis features for better page processing": "Enable advanced visual analysis features for better page processing",
|
||||
"Stop screenshot if it costs more than this. Leave blank for default limit.": "Stop screenshot if it costs more than this. Leave blank for default limit.",
|
||||
"Stop screenshot if it takes longer than this. Leave blank for default timeout.": "Stop screenshot if it takes longer than this. Leave blank for default timeout.",
|
||||
"The question or instruction for Airtop to answer about the current page.": "The question or instruction for Airtop to answer about the current page.",
|
||||
"An optional ID for your internal tracking.": "An optional ID for your internal tracking.",
|
||||
"JSON schema defining the structure of the output. Must be valid JSON schema format.": "JSON schema defining the structure of the output. Must be valid JSON schema format.",
|
||||
"Whether to include visual analysis of the page (default: auto)": "Whether to include visual analysis of the page (default: auto)",
|
||||
"Improve scraping performance by optimizing URLs (default: auto)": "Improve scraping performance by optimizing URLs (default: auto)",
|
||||
"Abort if the credit cost exceeds this amount. Set to 0 to disable.": "Abort if the credit cost exceeds this amount. Set to 0 to disable.",
|
||||
"Abort if the operation takes longer than this. Set to 0 to disable.": "Abort if the operation takes longer than this. Set to 0 to disable.",
|
||||
"If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)": "If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)",
|
||||
"Optional ID to track this request on your end.": "Optional ID to track this request on your end.",
|
||||
"Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").": "Instructions on what to extract and how to paginate (e.g. \"Navigate through 3 pages and extract titles and prices\").",
|
||||
"Optional ID to track this request.": "Optional ID to track this request.",
|
||||
"Describe the scrollable area (e.g. \"results container in middle of page\").": "Describe the scrollable area (e.g. \"results container in middle of page\").",
|
||||
"Choose how to navigate through pages (default: auto)": "Choose how to navigate through pages (default: auto)",
|
||||
"Balance between speed and accuracy (default: auto)": "Balance between speed and accuracy (default: auto)",
|
||||
"Describe the element to click (e.g. \"Login button\").": "Describe the element to click (e.g. \"Login button\").",
|
||||
"The type of click to perform (default: left click).": "The type of click to perform (default: left click).",
|
||||
"Describe the scrollable area to search within (e.g. \"main content area\").": "Describe the scrollable area to search within (e.g. \"main content area\").",
|
||||
"Controls how much of the page is visually analyzed (default: auto).": "Controls how much of the page is visually analyzed (default: auto).",
|
||||
"How to select from multiple matches (default: auto).": "How to select from multiple matches (default: auto).",
|
||||
"How to partition screenshots for analysis (default: vertical).": "How to partition screenshots for analysis (default: vertical).",
|
||||
"Maximum number of scrolls in scan mode (default: 50).": "Maximum number of scrolls in scan mode (default: 50).",
|
||||
"Delay between scrolls in scan mode (default: 1000ms).": "Delay between scrolls in scan mode (default: 1000ms).",
|
||||
"Percentage of overlap between screenshot chunks (default: 30).": "Percentage of overlap between screenshot chunks (default: 30).",
|
||||
"Wait for page navigation to complete after clicking (default: false).": "Wait for page navigation to complete after clicking (default: false).",
|
||||
"When to consider navigation complete (default: load).": "When to consider navigation complete (default: load).",
|
||||
"Max seconds to wait for navigation (default: 30).": "Max seconds to wait for navigation (default: 30).",
|
||||
"The text to type into the browser window.": "The text to type into the browser window.",
|
||||
"Describe the element (e.g., \"search box\", \"username field\").": "Describe the element (e.g., \"search box\", \"username field\").",
|
||||
"Clear the input field before typing text.": "Clear the input field before typing text.",
|
||||
"Press Enter key after typing text.": "Press Enter key after typing text.",
|
||||
"Press Tab key after typing text (after Enter if both enabled).": "Press Tab key after typing text (after Enter if both enabled).",
|
||||
"Wait for page navigation to complete after typing (default: false).": "Wait for page navigation to complete after typing (default: false).",
|
||||
"Max time to wait for navigation after typing (default: 30).": "Max time to wait for navigation after typing (default: 30).",
|
||||
"Condition to consider navigation complete (default: load).": "Condition to consider navigation complete (default: load).",
|
||||
"Controls how much of the page is analyzed to find the input (default: auto).": "Controls how much of the page is analyzed to find the input (default: auto).",
|
||||
"Percentage of overlap between visual chunks (default: 30).": "Percentage of overlap between visual chunks (default: 30).",
|
||||
"Direction to partition screenshots (default: vertical).": "Direction to partition screenshots (default: vertical).",
|
||||
"Describe the scrollable container (e.g., \"table body\", \"product list\").": "Describe the scrollable container (e.g., \"table body\", \"product list\").",
|
||||
"Optional request ID for traceability.": "Optional request ID for traceability.",
|
||||
"Cancel if this limit is exceeded. Set 0 to disable.": "Cancel if this limit is exceeded. Set 0 to disable.",
|
||||
"Cancel if exceeded. Set 0 to disable.": "Cancel if exceeded. Set 0 to disable.",
|
||||
"Select a file that has been uploaded to Airtop": "Select a file that has been uploaded to Airtop",
|
||||
"Select one or more sessions to make the file available on. Leave empty to make available to all sessions.": "Select one or more sessions to make the file available on. Leave empty to make available to all sessions.",
|
||||
"Describe the element to hover, e.g. \"the search box input in the top right corner\".": "Describe the element to hover, e.g. \"the search box input in the top right corner\".",
|
||||
"Wait for page navigation to complete after hovering (default: false).": "Wait for page navigation to complete after hovering (default: false).",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"1280x720 (Default)": "1280x720 (Default)",
|
||||
"1920x1080": "1920x1080",
|
||||
"1366x768": "1366x768",
|
||||
"1024x768": "1024x768",
|
||||
"800x600": "800x600",
|
||||
"Load (Page + Assets) - Default": "Load (Page + Assets) - Default",
|
||||
"DOM Content Loaded": "DOM Content Loaded",
|
||||
"Complete (Page + Iframes)": "Complete (Page + Iframes)",
|
||||
"No Wait (Return Immediately)": "No Wait (Return Immediately)",
|
||||
"Base64 Data (Default for Viewport)": "Base64 Data (Default for Viewport)",
|
||||
"Download URL (Default for Page/Scan)": "Download URL (Default for Page/Scan)",
|
||||
"Auto (Recommended)": "Auto (Recommended)",
|
||||
"Current View Only": "Current View Only",
|
||||
"Full Page": "Full Page",
|
||||
"Scan Mode (For Problem Pages)": "Scan Mode (For Problem Pages)",
|
||||
"Auto (Default)": "Auto (Default)",
|
||||
"Enabled": "已启用",
|
||||
"Disabled": "已禁用",
|
||||
"Click Next/Previous Links": "Click Next/Previous Links",
|
||||
"Infinite Scroll": "Infinite Scroll",
|
||||
"Auto (Balanced)": "Auto (Balanced)",
|
||||
"More Accurate (Slower)": "More Accurate (Slower)",
|
||||
"Faster (Less Accurate)": "Faster (Less Accurate)",
|
||||
"Left Click": "Left Click",
|
||||
"Double Click": "Double Click",
|
||||
"Right Click": "Right Click",
|
||||
"Scan Mode": "Scan Mode",
|
||||
"Auto": "Auto",
|
||||
"First Match": "First Match",
|
||||
"Best Match": "Best Match",
|
||||
"Vertical": "Vertical",
|
||||
"Horizontal": "Horizontal",
|
||||
"Bidirectional": "Bidirectional",
|
||||
"load": "load",
|
||||
"domcontentloaded": "domcontentloaded",
|
||||
"networkidle0": "networkidle0",
|
||||
"networkidle2": "networkidle2",
|
||||
"Load (Default)": "Load (Default)",
|
||||
"Network Idle 0": "Network Idle 0",
|
||||
"Network Idle 2": "Network Idle 2",
|
||||
"Viewport Only": "Viewport Only",
|
||||
"Vertical (Default)": "Vertical (Default)",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色"
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import { createPiece } from '@activepieces/pieces-framework';
|
||||
import { createSessionAction } from './lib/actions/create-session';
|
||||
import { terminateSessionAction } from './lib/actions/terminate-session';
|
||||
import { createNewBrowserWindowAction } from './lib/actions/create-new-browser-window';
|
||||
import { takeScreenshotAction } from './lib/actions/take-screenshot';
|
||||
import { pageQueryAction } from './lib/actions/page-query';
|
||||
import { smartScrapeAction } from './lib/actions/smart-scrape';
|
||||
import { paginatedExtractionAction } from './lib/actions/paginated-extraction';
|
||||
import { clickAction } from './lib/actions/click-an-element';
|
||||
import { typeAction } from './lib/actions/type';
|
||||
import { uploadFileToSessionAction } from './lib/actions/upload-file';
|
||||
import { hoverElementAction } from './lib/actions/hover-on-an-element';
|
||||
import { airtopAuth } from './lib/common/auth';
|
||||
import { BASE_URL } from './lib/common/client';
|
||||
|
||||
export const airtop = createPiece({
|
||||
displayName: 'Airtop',
|
||||
auth: airtopAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/airtop.png',
|
||||
authors: ['aryel780'],
|
||||
actions: [
|
||||
createSessionAction,
|
||||
terminateSessionAction,
|
||||
createNewBrowserWindowAction,
|
||||
takeScreenshotAction,
|
||||
pageQueryAction,
|
||||
smartScrapeAction,
|
||||
paginatedExtractionAction,
|
||||
clickAction,
|
||||
typeAction,
|
||||
uploadFileToSessionAction,
|
||||
hoverElementAction,
|
||||
createCustomApiCallAction({
|
||||
auth: airtopAuth,
|
||||
baseUrl: () => BASE_URL,
|
||||
authMapping: async (auth) => {
|
||||
return {
|
||||
Authorization: `Bearer ${auth.secret_text}`,
|
||||
};
|
||||
},
|
||||
}),
|
||||
],
|
||||
triggers: [],
|
||||
});
|
||||
@@ -0,0 +1,258 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const clickAction = createAction({
|
||||
name: 'click',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Click',
|
||||
description: 'Execute a click interaction in a specific browser window.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
elementDescription: Property.ShortText({
|
||||
displayName: 'Element Description',
|
||||
description: 'Describe the element to click (e.g. "Login button").',
|
||||
required: true,
|
||||
}),
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'Optional ID to track this request.',
|
||||
required: false,
|
||||
}),
|
||||
clickType: Property.StaticDropdown({
|
||||
displayName: 'Click Type',
|
||||
description: 'The type of click to perform (default: left click).',
|
||||
required: false,
|
||||
defaultValue: 'click',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Left Click', value: 'click' },
|
||||
{ label: 'Double Click', value: 'doubleClick' },
|
||||
{ label: 'Right Click', value: 'rightClick' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
scrollWithin: Property.ShortText({
|
||||
displayName: 'Scroll Within',
|
||||
description: 'Describe the scrollable area to search within (e.g. "main content area").',
|
||||
required: false,
|
||||
}),
|
||||
analysisScope: Property.StaticDropdown({
|
||||
displayName: 'Page Analysis Scope',
|
||||
description: 'Controls how much of the page is visually analyzed (default: auto).',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Auto (Recommended)', value: 'auto' },
|
||||
{ label: 'Current View Only', value: 'viewport' },
|
||||
{ label: 'Full Page', value: 'page' },
|
||||
{ label: 'Scan Mode', value: 'scan' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
resultSelectionStrategy: Property.StaticDropdown({
|
||||
displayName: 'Result Selection Strategy',
|
||||
description: 'How to select from multiple matches (default: auto).',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Auto', value: 'auto' },
|
||||
{ label: 'First Match', value: 'first' },
|
||||
{ label: 'Best Match', value: 'bestMatch' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
partitionDirection: Property.StaticDropdown({
|
||||
displayName: 'Partition Direction',
|
||||
description: 'How to partition screenshots for analysis (default: vertical).',
|
||||
required: false,
|
||||
defaultValue: 'vertical',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Vertical', value: 'vertical' },
|
||||
{ label: 'Horizontal', value: 'horizontal' },
|
||||
{ label: 'Bidirectional', value: 'bidirectional' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
maxScanScrolls: Property.Number({
|
||||
displayName: 'Maximum Scan Scrolls',
|
||||
description: 'Maximum number of scrolls in scan mode (default: 50).',
|
||||
required: false,
|
||||
}),
|
||||
scanScrollDelay: Property.Number({
|
||||
displayName: 'Scan Scroll Delay (ms)',
|
||||
description: 'Delay between scrolls in scan mode (default: 1000ms).',
|
||||
required: false,
|
||||
}),
|
||||
overlapPercentage: Property.Number({
|
||||
displayName: 'Overlap Percentage',
|
||||
description: 'Percentage of overlap between screenshot chunks (default: 30).',
|
||||
required: false,
|
||||
}),
|
||||
waitForNavigation: Property.Checkbox({
|
||||
displayName: 'Wait for Navigation',
|
||||
description: 'Wait for page navigation to complete after clicking (default: false).',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
navigationWaitUntil: Property.StaticDropdown({
|
||||
displayName: 'Navigation Wait Until',
|
||||
description: 'When to consider navigation complete (default: load).',
|
||||
required: false,
|
||||
defaultValue: 'load',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'load', value: 'load' },
|
||||
{ label: 'domcontentloaded', value: 'domcontentloaded' },
|
||||
{ label: 'networkidle0', value: 'networkidle0' },
|
||||
{ label: 'networkidle2', value: 'networkidle2' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
navigationTimeoutSeconds: Property.Number({
|
||||
displayName: 'Navigation Timeout (Seconds)',
|
||||
description: 'Max seconds to wait for navigation (default: 30).',
|
||||
required: false,
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Maximum Credits to Spend',
|
||||
description: 'Abort if the credit cost exceeds this amount. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Maximum Time (Seconds)',
|
||||
description: 'Abort if the operation takes longer than this. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
elementDescription,
|
||||
clickType,
|
||||
scrollWithin,
|
||||
analysisScope,
|
||||
resultSelectionStrategy,
|
||||
partitionDirection,
|
||||
maxScanScrolls,
|
||||
scanScrollDelay,
|
||||
overlapPercentage,
|
||||
waitForNavigation,
|
||||
navigationTimeoutSeconds,
|
||||
navigationWaitUntil,
|
||||
costThresholdCredits,
|
||||
timeThresholdSeconds,
|
||||
clientRequestId,
|
||||
} = context.propsValue;
|
||||
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
navigationTimeoutSeconds: z.number().min(0).optional(),
|
||||
maxScanScrolls: z.number().min(1).optional(),
|
||||
scanScrollDelay: z.number().min(0).optional(),
|
||||
overlapPercentage: z.number().min(0).max(100).optional(),
|
||||
});
|
||||
|
||||
const config: Record<string, any> = {};
|
||||
|
||||
if (clickType !== 'click') {
|
||||
config['clickType'] = clickType;
|
||||
}
|
||||
|
||||
if (scrollWithin) {
|
||||
config['experimental'] = {
|
||||
scrollWithin,
|
||||
};
|
||||
}
|
||||
|
||||
const visualAnalysis: Record<string, any> = {};
|
||||
|
||||
if (analysisScope !== 'auto') {
|
||||
visualAnalysis['scope'] = analysisScope;
|
||||
}
|
||||
|
||||
if (resultSelectionStrategy !== 'auto') {
|
||||
visualAnalysis['resultSelectionStrategy'] = resultSelectionStrategy;
|
||||
}
|
||||
|
||||
if (partitionDirection !== 'vertical') {
|
||||
visualAnalysis['partitionDirection'] = partitionDirection;
|
||||
}
|
||||
|
||||
if (typeof maxScanScrolls === 'number') {
|
||||
visualAnalysis['maxScanScrolls'] = maxScanScrolls;
|
||||
}
|
||||
|
||||
if (typeof scanScrollDelay === 'number') {
|
||||
visualAnalysis['scanScrollDelay'] = scanScrollDelay;
|
||||
}
|
||||
|
||||
if (typeof overlapPercentage === 'number') {
|
||||
visualAnalysis['overlapPercentage'] = overlapPercentage;
|
||||
}
|
||||
|
||||
if (Object.keys(visualAnalysis).length > 0) {
|
||||
config['visualAnalysis'] = visualAnalysis;
|
||||
}
|
||||
|
||||
if (waitForNavigation) {
|
||||
config['waitForNavigation'] = true;
|
||||
|
||||
const waitForNavigationConfig: Record<string, any> = {};
|
||||
if (navigationWaitUntil !== 'load') {
|
||||
waitForNavigationConfig['waitUntil'] = navigationWaitUntil;
|
||||
}
|
||||
if (typeof navigationTimeoutSeconds === 'number') {
|
||||
waitForNavigationConfig['timeoutSeconds'] = navigationTimeoutSeconds;
|
||||
}
|
||||
|
||||
if (Object.keys(waitForNavigationConfig).length > 0) {
|
||||
config['waitForNavigationConfig'] = waitForNavigationConfig;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
config['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
config['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
const body: Record<string, any> = {
|
||||
elementDescription,
|
||||
};
|
||||
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
|
||||
if (Object.keys(config).length > 0) {
|
||||
body['configuration'] = config;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/click`,
|
||||
body,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,95 @@
|
||||
import { HttpMethod, propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId } from '../common/props';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const createNewBrowserWindowAction = createAction({
|
||||
name: 'create-browser-window',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Create New Browser Window',
|
||||
description: 'Opens a new window within a session, optionally navigating to a URL.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
url: Property.ShortText({
|
||||
displayName: 'Initial URL',
|
||||
description: 'URL to open in the new window. Default: https://www.google.com',
|
||||
required: false,
|
||||
}),
|
||||
screenResolution: Property.StaticDropdown({
|
||||
displayName: 'Screen Resolution',
|
||||
description: 'Fixed dimensions for the browser window. Affects live view size.',
|
||||
required: false,
|
||||
defaultValue: '1280x720',
|
||||
options: {
|
||||
options: [
|
||||
{ label: '1280x720 (Default)', value: '1280x720' },
|
||||
{ label: '1920x1080', value: '1920x1080' },
|
||||
{ label: '1366x768', value: '1366x768' },
|
||||
{ label: '1024x768', value: '1024x768' },
|
||||
{ label: '800x600', value: '800x600' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
customResolution: Property.ShortText({
|
||||
displayName: 'Custom Resolution',
|
||||
description: 'Custom resolution in format "widthxheight" (e.g., "1440x900"). Leave blank to use selected resolution above.',
|
||||
required: false,
|
||||
}),
|
||||
waitUntil: Property.StaticDropdown({
|
||||
displayName: 'Page Load Strategy',
|
||||
description: 'When to consider the page loaded. Default: load',
|
||||
required: false,
|
||||
defaultValue: 'load',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Load (Page + Assets) - Default', value: 'load' },
|
||||
{ label: 'DOM Content Loaded', value: 'domContentLoaded' },
|
||||
{ label: 'Complete (Page + Iframes)', value: 'complete' },
|
||||
{ label: 'No Wait (Return Immediately)', value: 'noWait' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
waitUntilTimeoutSeconds: Property.Number({
|
||||
displayName: 'Page Load Timeout (seconds)',
|
||||
description: 'Maximum time to wait for page loading. Default: 30 seconds',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
sessionId,
|
||||
url,
|
||||
screenResolution,
|
||||
customResolution,
|
||||
waitUntil,
|
||||
waitUntilTimeoutSeconds,
|
||||
} = context.propsValue;
|
||||
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
url: z.string().url().optional(),
|
||||
customResolution: z.string().regex(/^\d+x\d+$/, 'Must be in format "widthxheight" (e.g., "1920x1080")').optional(),
|
||||
waitUntilTimeoutSeconds: z.number().positive().optional(),
|
||||
});
|
||||
|
||||
const body: Record<string, any> = {};
|
||||
|
||||
if (url) body['url'] = url;
|
||||
|
||||
const finalResolution = customResolution || screenResolution;
|
||||
if (finalResolution) body['screenResolution'] = finalResolution;
|
||||
|
||||
if (waitUntil) body['waitUntil'] = waitUntil;
|
||||
if (waitUntilTimeoutSeconds) body['waitUntilTimeoutSeconds'] = waitUntilTimeoutSeconds;
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows`,
|
||||
body,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,234 @@
|
||||
import { HttpMethod, propsValidation } from '@activepieces/pieces-common';
|
||||
import {
|
||||
createAction,
|
||||
DynamicPropsValue,
|
||||
InputPropertyMap,
|
||||
Property,
|
||||
PropertyContext,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const createSessionAction = createAction({
|
||||
name: 'create-session',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Create Session',
|
||||
description: 'Starts a new browser session in Airtop.',
|
||||
props: {
|
||||
profileName: Property.ShortText({
|
||||
displayName: 'Profile Name',
|
||||
description: 'Name of a profile to load into the session.',
|
||||
required: false,
|
||||
}),
|
||||
extensionIds: Property.Array({
|
||||
displayName: 'Extension IDs',
|
||||
description: 'List of Chrome extension IDs from Google Web Store.',
|
||||
required: false,
|
||||
}),
|
||||
useAirtopProxy: Property.Checkbox({
|
||||
displayName: 'Use Airtop Proxy?',
|
||||
description: 'Enable Airtop-provided proxy. If disabled, configure a custom proxy.',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
proxyConfig: Property.DynamicProperties({
|
||||
auth: airtopAuth,
|
||||
displayName: 'Custom Proxy Configuration',
|
||||
refreshers: ['useAirtopProxy'],
|
||||
required: false,
|
||||
props: async (propsValue: Record<string, unknown>, _ctx: PropertyContext): Promise<InputPropertyMap> => {
|
||||
const useAirtopProxy = propsValue['useAirtopProxy'] as boolean | undefined;
|
||||
|
||||
if (useAirtopProxy === false) {
|
||||
return {
|
||||
proxyType: Property.StaticDropdown({
|
||||
displayName: 'Proxy Configuration Type',
|
||||
description: 'Choose how to configure your proxy settings',
|
||||
required: true,
|
||||
defaultValue: 'simple',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Simple URL Only', value: 'simple' },
|
||||
{ label: 'With Country/Sticky Settings', value: 'country_sticky' },
|
||||
{ label: 'With Authentication', value: 'auth' },
|
||||
{ label: 'Multiple Proxies (Domain Patterns)', value: 'multiple' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
proxyUrl: Property.ShortText({
|
||||
displayName: 'Proxy URL',
|
||||
description: 'The proxy URL (e.g., http://proxy.example.com:8080)',
|
||||
required: true,
|
||||
}),
|
||||
};
|
||||
}
|
||||
return {};
|
||||
},
|
||||
}),
|
||||
proxyAdvanced: Property.DynamicProperties({
|
||||
auth: airtopAuth,
|
||||
displayName: 'Advanced Proxy Settings',
|
||||
refreshers: ['useAirtopProxy', 'proxyConfig'],
|
||||
required: false,
|
||||
props: async (propsValue: Record<string, unknown>, _ctx: PropertyContext): Promise<InputPropertyMap> => {
|
||||
const useAirtopProxy = propsValue['useAirtopProxy'] as boolean | undefined;
|
||||
const proxyConfig = propsValue['proxyConfig'] as any;
|
||||
|
||||
if (useAirtopProxy === false && proxyConfig?.proxyType) {
|
||||
const proxyType = proxyConfig.proxyType;
|
||||
|
||||
if (proxyType === 'country_sticky') {
|
||||
return {
|
||||
proxyCountry: Property.ShortText({
|
||||
displayName: 'Country Code',
|
||||
description: 'ISO 3166-1 alpha-2 format (e.g., "US", "GB"). Use "global" for random countries.',
|
||||
required: false,
|
||||
defaultValue: 'US',
|
||||
}),
|
||||
proxySticky: Property.Checkbox({
|
||||
displayName: 'Sticky IP',
|
||||
description: 'Try to maintain the same IP address for up to 30 minutes',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
if (proxyType === 'auth') {
|
||||
return {
|
||||
proxyUsername: Property.ShortText({
|
||||
displayName: 'Username',
|
||||
description: 'Username for proxy authentication',
|
||||
required: false,
|
||||
}),
|
||||
proxyPassword: Property.ShortText({
|
||||
displayName: 'Password',
|
||||
description: 'Password for proxy authentication',
|
||||
required: false,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
if (proxyType === 'multiple') {
|
||||
return {
|
||||
proxyList: Property.Array({
|
||||
displayName: 'Proxy List',
|
||||
description: 'Configure multiple proxies with domain patterns',
|
||||
required: true,
|
||||
properties: {
|
||||
domainPattern: Property.ShortText({
|
||||
displayName: 'Domain Pattern',
|
||||
description: 'Domain pattern (e.g., "*.example.com"). Use ? for single character, * for multiple.',
|
||||
required: true,
|
||||
}),
|
||||
relayUrl: Property.ShortText({
|
||||
displayName: 'Proxy URL',
|
||||
description: 'Proxy URL for this domain pattern',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
}),
|
||||
};
|
||||
}
|
||||
}
|
||||
return {};
|
||||
},
|
||||
}),
|
||||
solveCaptcha: Property.Checkbox({
|
||||
displayName: 'Solve Captcha',
|
||||
description: 'Automatically solve captcha challenges.',
|
||||
required: false,
|
||||
}),
|
||||
timeoutMinutes: Property.Number({
|
||||
displayName: 'Session Timeout (minutes)',
|
||||
description: 'How long before the session times out due to inactivity (1-10080 minutes). Default: 10.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const {
|
||||
profileName,
|
||||
extensionIds,
|
||||
useAirtopProxy,
|
||||
solveCaptcha,
|
||||
timeoutMinutes,
|
||||
proxyConfig,
|
||||
proxyAdvanced,
|
||||
} = context.propsValue as {
|
||||
profileName?: string;
|
||||
extensionIds?: string[];
|
||||
useAirtopProxy?: boolean;
|
||||
solveCaptcha?: boolean;
|
||||
timeoutMinutes?: number;
|
||||
proxyConfig?: {
|
||||
proxyType?: string;
|
||||
proxyUrl?: string;
|
||||
};
|
||||
proxyAdvanced?: {
|
||||
proxyCountry?: string;
|
||||
proxySticky?: boolean;
|
||||
proxyUsername?: string;
|
||||
proxyPassword?: string;
|
||||
proxyList?: Array<{
|
||||
domainPattern: string;
|
||||
relayUrl: string;
|
||||
}>;
|
||||
};
|
||||
};
|
||||
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
timeoutMinutes: z.number().min(1).max(10080).optional(),
|
||||
});
|
||||
|
||||
const config: Record<string, any> = {};
|
||||
|
||||
if (profileName) config['profileName'] = profileName;
|
||||
if (extensionIds) config['extensionIds'] = extensionIds;
|
||||
if (typeof solveCaptcha !== 'undefined') config['solveCaptcha'] = solveCaptcha;
|
||||
if (timeoutMinutes) config['timeoutMinutes'] = timeoutMinutes;
|
||||
|
||||
if (useAirtopProxy === false && proxyConfig?.proxyUrl) {
|
||||
const proxyType = proxyConfig.proxyType;
|
||||
|
||||
if (proxyType === 'simple') {
|
||||
config['proxy'] = proxyConfig.proxyUrl;
|
||||
} else if (proxyType === 'country_sticky') {
|
||||
config['proxy'] = {
|
||||
country: proxyAdvanced?.proxyCountry || 'US',
|
||||
sticky: proxyAdvanced?.proxySticky !== false,
|
||||
};
|
||||
} else if (proxyType === 'auth') {
|
||||
const proxyObj: any = {
|
||||
url: proxyConfig.proxyUrl,
|
||||
};
|
||||
if (proxyAdvanced?.proxyUsername) {
|
||||
proxyObj.username = proxyAdvanced.proxyUsername;
|
||||
}
|
||||
if (proxyAdvanced?.proxyPassword) {
|
||||
proxyObj.password = proxyAdvanced.proxyPassword;
|
||||
}
|
||||
config['proxy'] = proxyObj;
|
||||
} else if (proxyType === 'multiple' && proxyAdvanced?.proxyList) {
|
||||
config['proxy'] = proxyAdvanced.proxyList.map((proxy) => ({
|
||||
domainPattern: proxy.domainPattern,
|
||||
relay: proxy.relayUrl,
|
||||
}));
|
||||
}
|
||||
} else if (useAirtopProxy !== false) {
|
||||
config['proxy'] = true;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/sessions',
|
||||
body: {
|
||||
configuration: config,
|
||||
},
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,231 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const hoverElementAction = createAction({
|
||||
auth: airtopAuth,
|
||||
name: 'hover-element',
|
||||
displayName: 'Hover on an Element',
|
||||
description: 'Moves mouse pointer over an element in the browser window.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
elementDescription: Property.ShortText({
|
||||
displayName: 'Element Description',
|
||||
description: 'Describe the element to hover, e.g. "the search box input in the top right corner".',
|
||||
required: true,
|
||||
}),
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'Optional ID to track this request.',
|
||||
required: false,
|
||||
}),
|
||||
scrollWithin: Property.ShortText({
|
||||
displayName: 'Scroll Within',
|
||||
description: 'Describe the scrollable area to search within (e.g. "main content area").',
|
||||
required: false,
|
||||
}),
|
||||
analysisScope: Property.StaticDropdown({
|
||||
displayName: 'Page Analysis Scope',
|
||||
description: 'Controls how much of the page is visually analyzed (default: auto).',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Auto (Recommended)', value: 'auto' },
|
||||
{ label: 'Current View Only', value: 'viewport' },
|
||||
{ label: 'Full Page', value: 'page' },
|
||||
{ label: 'Scan Mode', value: 'scan' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
resultSelectionStrategy: Property.StaticDropdown({
|
||||
displayName: 'Result Selection Strategy',
|
||||
description: 'How to select from multiple matches (default: auto).',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Auto', value: 'auto' },
|
||||
{ label: 'First Match', value: 'first' },
|
||||
{ label: 'Best Match', value: 'bestMatch' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
partitionDirection: Property.StaticDropdown({
|
||||
displayName: 'Partition Direction',
|
||||
description: 'How to partition screenshots for analysis (default: vertical).',
|
||||
required: false,
|
||||
defaultValue: 'vertical',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'Vertical', value: 'vertical' },
|
||||
{ label: 'Horizontal', value: 'horizontal' },
|
||||
{ label: 'Bidirectional', value: 'bidirectional' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
maxScanScrolls: Property.Number({
|
||||
displayName: 'Maximum Scan Scrolls',
|
||||
description: 'Maximum number of scrolls in scan mode (default: 50).',
|
||||
required: false,
|
||||
}),
|
||||
scanScrollDelay: Property.Number({
|
||||
displayName: 'Scan Scroll Delay (ms)',
|
||||
description: 'Delay between scrolls in scan mode (default: 1000ms).',
|
||||
required: false,
|
||||
}),
|
||||
overlapPercentage: Property.Number({
|
||||
displayName: 'Overlap Percentage',
|
||||
description: 'Percentage of overlap between screenshot chunks (default: 30).',
|
||||
required: false,
|
||||
}),
|
||||
waitForNavigation: Property.Checkbox({
|
||||
displayName: 'Wait for Navigation',
|
||||
description: 'Wait for page navigation to complete after hovering (default: false).',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
navigationWaitUntil: Property.StaticDropdown({
|
||||
displayName: 'Navigation Wait Until',
|
||||
description: 'When to consider navigation complete (default: load).',
|
||||
required: false,
|
||||
defaultValue: 'load',
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'load', value: 'load' },
|
||||
{ label: 'domcontentloaded', value: 'domcontentloaded' },
|
||||
{ label: 'networkidle0', value: 'networkidle0' },
|
||||
{ label: 'networkidle2', value: 'networkidle2' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
navigationTimeoutSeconds: Property.Number({
|
||||
displayName: 'Navigation Timeout (Seconds)',
|
||||
description: 'Max seconds to wait for navigation (default: 30).',
|
||||
required: false,
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Maximum Credits to Spend',
|
||||
description: 'Abort if the credit cost exceeds this amount. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Maximum Time (Seconds)',
|
||||
description: 'Abort if the operation takes longer than this. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
elementDescription,
|
||||
clientRequestId,
|
||||
scrollWithin,
|
||||
analysisScope,
|
||||
resultSelectionStrategy,
|
||||
partitionDirection,
|
||||
maxScanScrolls,
|
||||
scanScrollDelay,
|
||||
overlapPercentage,
|
||||
waitForNavigation,
|
||||
navigationWaitUntil,
|
||||
navigationTimeoutSeconds,
|
||||
costThresholdCredits,
|
||||
timeThresholdSeconds,
|
||||
} = propsValue;
|
||||
|
||||
await propsValidation.validateZod(propsValue, {
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
navigationTimeoutSeconds: z.number().min(0).optional(),
|
||||
maxScanScrolls: z.number().min(1).optional(),
|
||||
scanScrollDelay: z.number().min(0).optional(),
|
||||
overlapPercentage: z.number().min(0).max(100).optional(),
|
||||
});
|
||||
|
||||
const configuration: Record<string, any> = {};
|
||||
|
||||
if (scrollWithin) {
|
||||
configuration['experimental'] = {
|
||||
scrollWithin,
|
||||
};
|
||||
}
|
||||
|
||||
const visualAnalysis: Record<string, any> = {};
|
||||
|
||||
visualAnalysis['scope'] = analysisScope;
|
||||
|
||||
if (resultSelectionStrategy !== 'auto') {
|
||||
visualAnalysis['resultSelectionStrategy'] = resultSelectionStrategy;
|
||||
}
|
||||
|
||||
if (partitionDirection !== 'vertical') {
|
||||
visualAnalysis['partitionDirection'] = partitionDirection;
|
||||
}
|
||||
|
||||
if (typeof maxScanScrolls === 'number') {
|
||||
visualAnalysis['maxScanScrolls'] = maxScanScrolls;
|
||||
}
|
||||
|
||||
if (typeof scanScrollDelay === 'number') {
|
||||
visualAnalysis['scanScrollDelay'] = scanScrollDelay;
|
||||
}
|
||||
|
||||
if (typeof overlapPercentage === 'number') {
|
||||
visualAnalysis['overlapPercentage'] = overlapPercentage;
|
||||
}
|
||||
|
||||
configuration['visualAnalysis'] = visualAnalysis;
|
||||
|
||||
if (waitForNavigation) {
|
||||
const waitForNavigationConfig: Record<string, any> = {};
|
||||
if (navigationWaitUntil !== 'load') {
|
||||
waitForNavigationConfig['waitUntil'] = navigationWaitUntil;
|
||||
}
|
||||
if (typeof navigationTimeoutSeconds === 'number') {
|
||||
waitForNavigationConfig['timeoutSeconds'] = navigationTimeoutSeconds;
|
||||
}
|
||||
|
||||
configuration['waitForNavigationConfig'] = waitForNavigationConfig;
|
||||
}
|
||||
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
configuration['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
configuration['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
const body: Record<string, any> = {
|
||||
elementDescription,
|
||||
};
|
||||
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
|
||||
if (Object.keys(configuration).length > 0) {
|
||||
body['configuration'] = configuration;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/hover`,
|
||||
body,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,154 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const pageQueryAction = createAction({
|
||||
name: 'page-query',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Page Query',
|
||||
description: 'Query a page to extract data or ask a question given the data on the page.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
prompt: Property.LongText({
|
||||
displayName: 'Prompt',
|
||||
description: 'The question or instruction for Airtop to answer about the current page.',
|
||||
required: true,
|
||||
}),
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'An optional ID for your internal tracking.',
|
||||
required: false,
|
||||
}),
|
||||
outputSchema: Property.LongText({
|
||||
displayName: 'Output Schema (JSON)',
|
||||
description: 'JSON schema defining the structure of the output. Must be valid JSON schema format.',
|
||||
required: false,
|
||||
}),
|
||||
includeVisualAnalysis: Property.StaticDropdown({
|
||||
displayName: 'Visual Analysis',
|
||||
description: 'Whether to include visual analysis of the page (default: auto)',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Default)', value: 'auto' },
|
||||
{ label: 'Enabled', value: 'enabled' },
|
||||
{ label: 'Disabled', value: 'disabled' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
optimizeUrls: Property.StaticDropdown({
|
||||
displayName: 'Optimize URLs',
|
||||
description: 'Improve scraping performance by optimizing URLs (default: auto)',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Default)', value: 'auto' },
|
||||
{ label: 'Enabled', value: 'enabled' },
|
||||
{ label: 'Disabled', value: 'disabled' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Maximum Credits to Spend',
|
||||
description: 'Abort if the credit cost exceeds this amount. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Maximum Time (Seconds)',
|
||||
description: 'Abort if the operation takes longer than this. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
followPaginationLinks: Property.Checkbox({
|
||||
displayName: 'Follow Pagination Links',
|
||||
description:
|
||||
'If enabled, Airtop will attempt to load more content from pagination, scrolling, etc. (default: false)',
|
||||
required: false,
|
||||
})
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
prompt,
|
||||
clientRequestId,
|
||||
costThresholdCredits,
|
||||
followPaginationLinks,
|
||||
timeThresholdSeconds,
|
||||
outputSchema,
|
||||
includeVisualAnalysis,
|
||||
optimizeUrls,
|
||||
} = propsValue;
|
||||
|
||||
await propsValidation.validateZod(propsValue, {
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
outputSchema: z.string().refine((val) => {
|
||||
if (!val) return true;
|
||||
try {
|
||||
JSON.parse(val);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}, { message: 'Must be valid JSON format' }).optional(),
|
||||
});
|
||||
|
||||
const configuration: Record<string, any> = {};
|
||||
|
||||
if (outputSchema) {
|
||||
configuration['outputSchema'] = outputSchema;
|
||||
}
|
||||
|
||||
if (optimizeUrls !== 'auto') {
|
||||
configuration['scrape'] = {
|
||||
optimizeUrls,
|
||||
};
|
||||
}
|
||||
|
||||
if (includeVisualAnalysis !== 'auto') {
|
||||
configuration['experimental'] = {
|
||||
includeVisualAnalysis,
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
configuration['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
|
||||
if (followPaginationLinks === true) {
|
||||
configuration['followPaginationLinks'] = followPaginationLinks;
|
||||
}
|
||||
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
configuration['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
const body: Record<string, any> = {
|
||||
prompt,
|
||||
};
|
||||
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
|
||||
if (Object.keys(configuration).length > 0) {
|
||||
body['configuration'] = configuration;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/page-query`,
|
||||
body,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,171 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const paginatedExtractionAction = createAction({
|
||||
name: 'paginated-extraction',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Paginated Extraction',
|
||||
description: 'Extract content from paginated or dynamically loaded pages.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
prompt: Property.LongText({
|
||||
displayName: 'Prompt',
|
||||
description: 'Instructions on what to extract and how to paginate (e.g. "Navigate through 3 pages and extract titles and prices").',
|
||||
required: true,
|
||||
}),
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'Optional ID to track this request.',
|
||||
required: false,
|
||||
}),
|
||||
outputSchema: Property.LongText({
|
||||
displayName: 'Output Schema (JSON)',
|
||||
description: 'JSON schema defining the structure of the output. Must be valid JSON schema format.',
|
||||
required: false,
|
||||
}),
|
||||
scrollWithin: Property.ShortText({
|
||||
displayName: 'Scroll Within',
|
||||
description: 'Describe the scrollable area (e.g. "results container in middle of page").',
|
||||
required: false,
|
||||
}),
|
||||
paginationMode: Property.StaticDropdown({
|
||||
displayName: 'How to Load More Content',
|
||||
description: 'Choose how to navigate through pages (default: auto)',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Recommended)', value: 'auto' },
|
||||
{ label: 'Click Next/Previous Links', value: 'paginated' },
|
||||
{ label: 'Infinite Scroll', value: 'infinite-scroll' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
interactionMode: Property.StaticDropdown({
|
||||
displayName: 'Speed vs Accuracy',
|
||||
description: 'Balance between speed and accuracy (default: auto)',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Balanced)', value: 'auto' },
|
||||
{ label: 'More Accurate (Slower)', value: 'accurate' },
|
||||
{ label: 'Faster (Less Accurate)', value: 'cost-efficient' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
optimizeUrls: Property.StaticDropdown({
|
||||
displayName: 'Optimize URLs',
|
||||
description: 'Improve scraping performance by optimizing URLs (default: auto)',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Default)', value: 'auto' },
|
||||
{ label: 'Enabled', value: 'enabled' },
|
||||
{ label: 'Disabled', value: 'disabled' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Maximum Credits to Spend',
|
||||
description: 'Abort if the credit cost exceeds this amount. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Maximum Time (Seconds)',
|
||||
description: 'Abort if the operation takes longer than this. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
prompt,
|
||||
clientRequestId,
|
||||
costThresholdCredits,
|
||||
timeThresholdSeconds,
|
||||
outputSchema,
|
||||
scrollWithin,
|
||||
paginationMode,
|
||||
interactionMode,
|
||||
optimizeUrls,
|
||||
} = propsValue;
|
||||
|
||||
await propsValidation.validateZod(propsValue, {
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
outputSchema: z.string().refine((val) => {
|
||||
if (!val) return true;
|
||||
try {
|
||||
JSON.parse(val);
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}, { message: 'Must be valid JSON format' }).optional(),
|
||||
});
|
||||
|
||||
const configuration: Record<string, any> = {};
|
||||
|
||||
if (outputSchema) {
|
||||
configuration['outputSchema'] = outputSchema;
|
||||
}
|
||||
|
||||
if (scrollWithin) {
|
||||
configuration['experimental'] = {
|
||||
scrollWithin,
|
||||
};
|
||||
}
|
||||
|
||||
if (paginationMode !== 'auto') {
|
||||
configuration['paginationMode'] = paginationMode;
|
||||
}
|
||||
|
||||
if (interactionMode !== 'auto') {
|
||||
configuration['interactionMode'] = interactionMode;
|
||||
}
|
||||
|
||||
if (optimizeUrls !== 'auto') {
|
||||
configuration['scrape'] = {
|
||||
optimizeUrls,
|
||||
};
|
||||
}
|
||||
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
configuration['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
configuration['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
const body: Record<string, any> = {
|
||||
prompt,
|
||||
};
|
||||
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
|
||||
if (Object.keys(configuration).length > 0) {
|
||||
body['configuration'] = configuration;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/paginated-extraction`,
|
||||
body,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,70 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const smartScrapeAction = createAction({
|
||||
name: 'smart-scrape',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Smart Scrape',
|
||||
description: 'Scrape a page and return the data as Markdown.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'Optional ID to track this request on your end.',
|
||||
required: false,
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Maximum Credits to Spend',
|
||||
description: 'Abort if the credit cost exceeds this amount. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Maximum Time (Seconds)',
|
||||
description: 'Abort if the operation takes longer than this. Set to 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
clientRequestId,
|
||||
costThresholdCredits,
|
||||
timeThresholdSeconds,
|
||||
} = context.propsValue;
|
||||
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
});
|
||||
|
||||
const body: Record<string, any> = {};
|
||||
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
body['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
body['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/scrape-content`,
|
||||
body,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,273 @@
|
||||
import { HttpMethod, propsValidation } from '@activepieces/pieces-common';
|
||||
import { createAction, Property, DynamicPropsValue, InputPropertyMap, PropertyContext } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const takeScreenshotAction = createAction({
|
||||
name: 'take-screenshot',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Take Screenshot',
|
||||
description: 'Captures a screenshot of the current window.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'Optional ID for tracking this request',
|
||||
required: false,
|
||||
}),
|
||||
format: Property.StaticDropdown({
|
||||
displayName: 'Screenshot Format',
|
||||
description: 'How to return the screenshot. Default: base64 for viewport, url for page/scan',
|
||||
required: false,
|
||||
defaultValue: 'base64',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Base64 Data (Default for Viewport)', value: 'base64' },
|
||||
{ label: 'Download URL (Default for Page/Scan)', value: 'url' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
scope: Property.StaticDropdown({
|
||||
displayName: 'Screenshot Scope',
|
||||
description: 'What part of the page to capture. Default: auto',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Recommended)', value: 'auto' },
|
||||
{ label: 'Current View Only', value: 'viewport' },
|
||||
{ label: 'Full Page', value: 'page' },
|
||||
{ label: 'Scan Mode (For Problem Pages)', value: 'scan' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
maxHeight: Property.Number({
|
||||
displayName: 'Max Height (pixels)',
|
||||
description: 'Maximum height of screenshot. Will scale down if needed, preserving aspect ratio.',
|
||||
required: false,
|
||||
}),
|
||||
maxWidth: Property.Number({
|
||||
displayName: 'Max Width (pixels)',
|
||||
description: 'Maximum width of screenshot. Will scale down if needed, preserving aspect ratio.',
|
||||
required: false,
|
||||
}),
|
||||
quality: Property.Number({
|
||||
displayName: 'JPEG Quality (1-100)',
|
||||
description: 'Image quality for JPEG compression. Higher = better quality. Note: Feature in development.',
|
||||
required: false,
|
||||
}),
|
||||
enableVisualAnalysis: Property.Checkbox({
|
||||
displayName: 'Enable Advanced Visual Analysis',
|
||||
description: 'Enable advanced visual analysis features for better page processing',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
visualAnalysisConfig: Property.DynamicProperties({
|
||||
auth: airtopAuth,
|
||||
displayName: 'Visual Analysis Settings',
|
||||
refreshers: ['enableVisualAnalysis'],
|
||||
required: false,
|
||||
props: async (propsValue: Record<string, unknown>, _ctx: PropertyContext): Promise<InputPropertyMap> => {
|
||||
const enableVisualAnalysis = propsValue['enableVisualAnalysis'] as boolean | undefined;
|
||||
|
||||
if (enableVisualAnalysis) {
|
||||
return {
|
||||
analysisScope: Property.StaticDropdown({
|
||||
displayName: 'Analysis Scope',
|
||||
description: 'Override main scope setting for visual analysis. Default: auto',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Recommended)', value: 'auto' },
|
||||
{ label: 'Current View Only', value: 'viewport' },
|
||||
{ label: 'Full Page', value: 'page' },
|
||||
{ label: 'Scan Mode', value: 'scan' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
partitionDirection: Property.StaticDropdown({
|
||||
displayName: 'Partition Direction',
|
||||
description: 'How to split the screenshot into chunks. Default: vertical',
|
||||
required: false,
|
||||
defaultValue: 'vertical',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Vertical (Recommended)', value: 'vertical' },
|
||||
{ label: 'Horizontal', value: 'horizontal' },
|
||||
{ label: 'Both Directions', value: 'bidirectional' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
resultSelectionStrategy: Property.StaticDropdown({
|
||||
displayName: 'Result Selection Strategy',
|
||||
description: 'How to select the best match when multiple results found. Default: auto',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Let System Decide)', value: 'auto' },
|
||||
{ label: 'First Match Found', value: 'first' },
|
||||
{ label: 'Best Match Overall', value: 'bestMatch' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
maxScanScrolls: Property.Number({
|
||||
displayName: 'Max Scan Scrolls',
|
||||
description: 'Maximum number of scrolls in scan mode. Default: 50',
|
||||
required: false,
|
||||
}),
|
||||
overlapPercentage: Property.Number({
|
||||
displayName: 'Overlap Percentage',
|
||||
description: 'Percentage of overlap between screenshot chunks. Default: 30',
|
||||
required: false,
|
||||
}),
|
||||
scanScrollDelay: Property.Number({
|
||||
displayName: 'Scroll Delay (ms)',
|
||||
description: 'Delay between scrolls in scan mode. Default: 1000ms',
|
||||
required: false,
|
||||
}),
|
||||
};
|
||||
}
|
||||
return {};
|
||||
},
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Maximum Credits to Spend',
|
||||
description: 'Stop screenshot if it costs more than this. Leave blank for default limit.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Maximum Time (seconds)',
|
||||
description: 'Stop screenshot if it takes longer than this. Leave blank for default timeout.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
clientRequestId,
|
||||
format,
|
||||
scope,
|
||||
maxHeight,
|
||||
maxWidth,
|
||||
quality,
|
||||
enableVisualAnalysis,
|
||||
visualAnalysisConfig,
|
||||
costThresholdCredits,
|
||||
timeThresholdSeconds,
|
||||
} = context.propsValue as {
|
||||
sessionId: string;
|
||||
windowId: string;
|
||||
clientRequestId?: string;
|
||||
format?: string;
|
||||
scope?: string;
|
||||
maxHeight?: number;
|
||||
maxWidth?: number;
|
||||
quality?: number;
|
||||
enableVisualAnalysis?: boolean;
|
||||
visualAnalysisConfig?: {
|
||||
analysisScope?: string;
|
||||
partitionDirection?: string;
|
||||
resultSelectionStrategy?: string;
|
||||
maxScanScrolls?: number;
|
||||
overlapPercentage?: number;
|
||||
scanScrollDelay?: number;
|
||||
};
|
||||
costThresholdCredits?: number;
|
||||
timeThresholdSeconds?: number;
|
||||
};
|
||||
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
maxHeight: z.number().positive().optional(),
|
||||
maxWidth: z.number().positive().optional(),
|
||||
quality: z.number().min(1).max(100).optional(),
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
});
|
||||
|
||||
const body: Record<string, any> = {};
|
||||
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
body['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
body['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
const config: Record<string, any> = {};
|
||||
|
||||
const screenshotConfig: Record<string, any> = {};
|
||||
if (format && format !== 'base64') {
|
||||
screenshotConfig['format'] = format;
|
||||
}
|
||||
if (typeof maxHeight === 'number') {
|
||||
screenshotConfig['maxHeight'] = maxHeight;
|
||||
}
|
||||
if (typeof maxWidth === 'number') {
|
||||
screenshotConfig['maxWidth'] = maxWidth;
|
||||
}
|
||||
if (typeof quality === 'number') {
|
||||
screenshotConfig['quality'] = quality;
|
||||
}
|
||||
|
||||
if (Object.keys(screenshotConfig).length > 0) {
|
||||
config['screenshot'] = screenshotConfig;
|
||||
}
|
||||
|
||||
// Visual analysis configuration - always include scope here, never at top level
|
||||
const visualAnalysis: Record<string, any> = {};
|
||||
|
||||
// Use the main scope setting or override from visual analysis config
|
||||
const effectiveScope = (enableVisualAnalysis && visualAnalysisConfig?.analysisScope) || scope;
|
||||
if (effectiveScope && effectiveScope !== 'auto') {
|
||||
visualAnalysis['scope'] = effectiveScope;
|
||||
}
|
||||
|
||||
// Add other visual analysis settings if enabled
|
||||
if (enableVisualAnalysis && visualAnalysisConfig) {
|
||||
if (visualAnalysisConfig.partitionDirection && visualAnalysisConfig.partitionDirection !== 'vertical') {
|
||||
visualAnalysis['partitionDirection'] = visualAnalysisConfig.partitionDirection;
|
||||
}
|
||||
if (visualAnalysisConfig.resultSelectionStrategy && visualAnalysisConfig.resultSelectionStrategy !== 'auto') {
|
||||
visualAnalysis['resultSelectionStrategy'] = visualAnalysisConfig.resultSelectionStrategy;
|
||||
}
|
||||
if (typeof visualAnalysisConfig.maxScanScrolls === 'number') {
|
||||
visualAnalysis['maxScanScrolls'] = visualAnalysisConfig.maxScanScrolls;
|
||||
}
|
||||
if (typeof visualAnalysisConfig.overlapPercentage === 'number') {
|
||||
visualAnalysis['overlapPercentage'] = visualAnalysisConfig.overlapPercentage;
|
||||
}
|
||||
if (typeof visualAnalysisConfig.scanScrollDelay === 'number') {
|
||||
visualAnalysis['scanScrollDelay'] = visualAnalysisConfig.scanScrollDelay;
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(visualAnalysis).length > 0) {
|
||||
config['visualAnalysis'] = visualAnalysis;
|
||||
}
|
||||
|
||||
if (Object.keys(config).length > 0) {
|
||||
body['configuration'] = config;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/screenshot`,
|
||||
body,
|
||||
});
|
||||
|
||||
return {
|
||||
message: `Screenshot captured for session ${sessionId}, window ${windowId}.`,
|
||||
response,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,29 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId } from '../common/props';
|
||||
|
||||
export const terminateSessionAction = createAction({
|
||||
name: 'terminate-session',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Terminate Session',
|
||||
description: 'Ends an existing browser session in Airtop.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
},
|
||||
async run(context) {
|
||||
const { sessionId } = context.propsValue;
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.DELETE,
|
||||
resourceUri: `/sessions/${sessionId}`,
|
||||
});
|
||||
|
||||
return {
|
||||
message: `Session ${sessionId} terminated successfully (or ignored if not found).`,
|
||||
response,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,265 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { HttpMethod, propsValidation } from '@activepieces/pieces-common';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall } from '../common/client';
|
||||
import { sessionId, windowId } from '../common/props';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const typeAction = createAction({
|
||||
name: 'type',
|
||||
auth: airtopAuth,
|
||||
displayName: 'Type',
|
||||
description: 'Type into a browser window at the specified field.',
|
||||
props: {
|
||||
sessionId: sessionId,
|
||||
windowId: windowId,
|
||||
text: Property.LongText({
|
||||
displayName: 'Text to Type',
|
||||
description: 'The text to type into the browser window.',
|
||||
required: true,
|
||||
}),
|
||||
elementDescription: Property.ShortText({
|
||||
displayName: 'Element Description',
|
||||
description: 'Describe the element (e.g., "search box", "username field").',
|
||||
required: false,
|
||||
}),
|
||||
clearInputField: Property.Checkbox({
|
||||
displayName: 'Clear Input Field Before Typing',
|
||||
description: 'Clear the input field before typing text.',
|
||||
defaultValue: false,
|
||||
required: false,
|
||||
}),
|
||||
pressEnterKey: Property.Checkbox({
|
||||
displayName: 'Press Enter After Typing',
|
||||
description: 'Press Enter key after typing text.',
|
||||
defaultValue: false,
|
||||
required: false,
|
||||
}),
|
||||
pressTabKey: Property.Checkbox({
|
||||
displayName: 'Press Tab After Typing',
|
||||
description: 'Press Tab key after typing text (after Enter if both enabled).',
|
||||
defaultValue: false,
|
||||
required: false,
|
||||
}),
|
||||
waitForNavigation: Property.Checkbox({
|
||||
displayName: 'Wait for Navigation After Typing',
|
||||
description: 'Wait for page navigation to complete after typing (default: false).',
|
||||
defaultValue: false,
|
||||
required: false,
|
||||
}),
|
||||
navigationTimeoutSeconds: Property.Number({
|
||||
displayName: 'Navigation Timeout (Seconds)',
|
||||
description: 'Max time to wait for navigation after typing (default: 30).',
|
||||
required: false,
|
||||
}),
|
||||
navigationWaitUntil: Property.StaticDropdown({
|
||||
displayName: 'Navigation Wait Strategy',
|
||||
description: 'Condition to consider navigation complete (default: load).',
|
||||
required: false,
|
||||
defaultValue: 'load',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Load (Default)', value: 'load' },
|
||||
{ label: 'DOM Content Loaded', value: 'domcontentloaded' },
|
||||
{ label: 'Network Idle 0', value: 'networkidle0' },
|
||||
{ label: 'Network Idle 2', value: 'networkidle2' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
analysisScope: Property.StaticDropdown({
|
||||
displayName: 'Page Analysis Scope',
|
||||
description: 'Controls how much of the page is analyzed to find the input (default: auto).',
|
||||
defaultValue: 'auto',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Recommended)', value: 'auto' },
|
||||
{ label: 'Viewport Only', value: 'viewport' },
|
||||
{ label: 'Full Page', value: 'page' },
|
||||
{ label: 'Scan Mode', value: 'scan' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
visualAnalysisMaxScrolls: Property.Number({
|
||||
displayName: 'Max Scrolls (Scan Mode)',
|
||||
description: 'Maximum number of scrolls in scan mode (default: 50).',
|
||||
required: false,
|
||||
}),
|
||||
visualAnalysisOverlap: Property.Number({
|
||||
displayName: 'Chunk Overlap (%)',
|
||||
description: 'Percentage of overlap between visual chunks (default: 30).',
|
||||
required: false,
|
||||
}),
|
||||
visualAnalysisDirection: Property.StaticDropdown({
|
||||
displayName: 'Partition Direction',
|
||||
description: 'Direction to partition screenshots (default: vertical).',
|
||||
required: false,
|
||||
defaultValue: 'vertical',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Vertical (Default)', value: 'vertical' },
|
||||
{ label: 'Horizontal', value: 'horizontal' },
|
||||
{ label: 'Bidirectional', value: 'bidirectional' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
visualAnalysisStrategy: Property.StaticDropdown({
|
||||
displayName: 'Result Selection Strategy',
|
||||
description: 'How to select from multiple matches (default: auto).',
|
||||
required: false,
|
||||
defaultValue: 'auto',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Default)', value: 'auto' },
|
||||
{ label: 'First Match', value: 'first' },
|
||||
{ label: 'Best Match', value: 'bestMatch' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
visualAnalysisScrollDelay: Property.Number({
|
||||
displayName: 'Scroll Delay (ms)',
|
||||
description: 'Delay between scrolls in scan mode (default: 1000ms).',
|
||||
required: false,
|
||||
}),
|
||||
scrollWithin: Property.ShortText({
|
||||
displayName: 'Scroll Within',
|
||||
description: 'Describe the scrollable container (e.g., "table body", "product list").',
|
||||
required: false,
|
||||
}),
|
||||
clientRequestId: Property.ShortText({
|
||||
displayName: 'Client Request ID',
|
||||
description: 'Optional request ID for traceability.',
|
||||
required: false,
|
||||
}),
|
||||
costThresholdCredits: Property.Number({
|
||||
displayName: 'Max Credits to Spend',
|
||||
description: 'Cancel if this limit is exceeded. Set 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
timeThresholdSeconds: Property.Number({
|
||||
displayName: 'Max Time to Wait (Seconds)',
|
||||
description: 'Cancel if exceeded. Set 0 to disable.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
sessionId,
|
||||
windowId,
|
||||
text,
|
||||
elementDescription,
|
||||
clearInputField,
|
||||
pressEnterKey,
|
||||
pressTabKey,
|
||||
waitForNavigation,
|
||||
navigationTimeoutSeconds,
|
||||
navigationWaitUntil,
|
||||
analysisScope,
|
||||
visualAnalysisMaxScrolls,
|
||||
visualAnalysisOverlap,
|
||||
visualAnalysisDirection,
|
||||
visualAnalysisStrategy,
|
||||
visualAnalysisScrollDelay,
|
||||
scrollWithin,
|
||||
clientRequestId,
|
||||
costThresholdCredits,
|
||||
timeThresholdSeconds,
|
||||
} = context.propsValue;
|
||||
|
||||
await propsValidation.validateZod(context.propsValue, {
|
||||
costThresholdCredits: z.number().min(0).optional(),
|
||||
timeThresholdSeconds: z.number().min(0).optional(),
|
||||
navigationTimeoutSeconds: z.number().min(0).optional(),
|
||||
visualAnalysisMaxScrolls: z.number().min(1).optional(),
|
||||
visualAnalysisOverlap: z.number().min(0).max(100).optional(),
|
||||
visualAnalysisScrollDelay: z.number().min(0).optional(),
|
||||
});
|
||||
|
||||
const body: Record<string, any> = {
|
||||
text,
|
||||
};
|
||||
|
||||
if (elementDescription) {
|
||||
body['elementDescription'] = elementDescription;
|
||||
}
|
||||
if (clearInputField === true) {
|
||||
body['clearInputField'] = clearInputField;
|
||||
}
|
||||
if (pressEnterKey === true) {
|
||||
body['pressEnterKey'] = pressEnterKey;
|
||||
}
|
||||
if (pressTabKey === true) {
|
||||
body['pressTabKey'] = pressTabKey;
|
||||
}
|
||||
if (clientRequestId) {
|
||||
body['clientRequestId'] = clientRequestId;
|
||||
}
|
||||
|
||||
const configuration: Record<string, any> = {};
|
||||
|
||||
const visualAnalysis: Record<string, any> = {};
|
||||
if (analysisScope !== 'auto') {
|
||||
visualAnalysis['scope'] = analysisScope;
|
||||
}
|
||||
if (typeof visualAnalysisMaxScrolls === 'number') {
|
||||
visualAnalysis['maxScanScrolls'] = visualAnalysisMaxScrolls;
|
||||
}
|
||||
if (typeof visualAnalysisOverlap === 'number') {
|
||||
visualAnalysis['overlapPercentage'] = visualAnalysisOverlap;
|
||||
}
|
||||
if (visualAnalysisDirection !== 'vertical') {
|
||||
visualAnalysis['partitionDirection'] = visualAnalysisDirection;
|
||||
}
|
||||
if (visualAnalysisStrategy !== 'auto') {
|
||||
visualAnalysis['resultSelectionStrategy'] = visualAnalysisStrategy;
|
||||
}
|
||||
if (typeof visualAnalysisScrollDelay === 'number') {
|
||||
visualAnalysis['scanScrollDelay'] = visualAnalysisScrollDelay;
|
||||
}
|
||||
|
||||
if (Object.keys(visualAnalysis).length > 0) {
|
||||
configuration['visualAnalysis'] = visualAnalysis;
|
||||
}
|
||||
|
||||
if (scrollWithin) {
|
||||
configuration['experimental'] = {
|
||||
scrollWithin,
|
||||
};
|
||||
}
|
||||
|
||||
if (waitForNavigation) {
|
||||
configuration['waitForNavigation'] = true;
|
||||
|
||||
const waitForNavigationConfig: Record<string, any> = {};
|
||||
if (typeof navigationTimeoutSeconds === 'number') {
|
||||
waitForNavigationConfig['timeoutSeconds'] = navigationTimeoutSeconds;
|
||||
}
|
||||
if (navigationWaitUntil !== 'load') {
|
||||
waitForNavigationConfig['waitUntil'] = navigationWaitUntil;
|
||||
}
|
||||
|
||||
if (Object.keys(waitForNavigationConfig).length > 0) {
|
||||
configuration['waitForNavigationConfig'] = waitForNavigationConfig;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof costThresholdCredits === 'number') {
|
||||
configuration['costThresholdCredits'] = costThresholdCredits;
|
||||
}
|
||||
if (typeof timeThresholdSeconds === 'number') {
|
||||
configuration['timeThresholdSeconds'] = timeThresholdSeconds;
|
||||
}
|
||||
|
||||
if (Object.keys(configuration).length > 0) {
|
||||
body['configuration'] = configuration;
|
||||
}
|
||||
|
||||
const response = await airtopApiCall({
|
||||
apiKey: context.auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/sessions/${sessionId}/windows/${windowId}/type`,
|
||||
body,
|
||||
});
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,106 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { airtopAuth } from '../common/auth';
|
||||
import { airtopApiCall, extractApiData, AirtopSession } from '../common/client';
|
||||
import { fileId } from '../common/props';
|
||||
import { propsValidation } from '@activepieces/pieces-common';
|
||||
import { z } from 'zod';
|
||||
|
||||
export const uploadFileToSessionAction = createAction({
|
||||
auth: airtopAuth,
|
||||
name: 'upload-file-to-session',
|
||||
displayName: 'Upload File to Sessions',
|
||||
description: 'Push an existing file to one or more sessions, making it available for use in file inputs or downloads.',
|
||||
props: {
|
||||
fileId: fileId,
|
||||
sessionIds: Property.MultiSelectDropdown({
|
||||
auth: airtopAuth,
|
||||
displayName: 'Session IDs',
|
||||
description: 'Select one or more sessions to make the file available on. Leave empty to make available to all sessions.',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await airtopApiCall<any>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/sessions',
|
||||
});
|
||||
|
||||
const sessions = extractApiData<AirtopSession>(response);
|
||||
|
||||
if (sessions.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: 'No active sessions found. Create a session first.',
|
||||
};
|
||||
}
|
||||
|
||||
const sortedSessions = sessions.sort((a, b) => {
|
||||
if (a.status === 'active' && b.status !== 'active') return -1;
|
||||
if (a.status !== 'active' && b.status === 'active') return 1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
const options = sortedSessions.map((session) => ({
|
||||
label: `${session.id} (${session.status})`,
|
||||
value: session.id,
|
||||
}));
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options,
|
||||
placeholder: options.length === 0 ? 'No sessions available' : 'Select sessions or leave empty for all',
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error loading sessions: ${error.message}`,
|
||||
};
|
||||
}
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run({ propsValue, auth }) {
|
||||
const { fileId, sessionIds } = propsValue;
|
||||
|
||||
if (sessionIds && sessionIds.length > 0) {
|
||||
await propsValidation.validateZod({ sessionIds }, {
|
||||
sessionIds: z.array(z.string().min(1, 'Session ID cannot be empty')).min(1, 'At least one session ID is required when providing session IDs'),
|
||||
});
|
||||
}
|
||||
|
||||
const body: Record<string, any> = {};
|
||||
|
||||
if (sessionIds && sessionIds.length > 0) {
|
||||
body['sessionIds'] = sessionIds;
|
||||
}
|
||||
|
||||
const result = await airtopApiCall({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: `/files/${fileId}/push`,
|
||||
body,
|
||||
});
|
||||
|
||||
return {
|
||||
fileId,
|
||||
sessionIds: sessionIds && sessionIds.length > 0 ? sessionIds : 'all sessions',
|
||||
sessionsCount: sessionIds?.length || 'all',
|
||||
message: sessionIds && sessionIds.length > 0
|
||||
? `File successfully pushed to ${sessionIds.length} session(s).`
|
||||
: 'File successfully pushed to all sessions.',
|
||||
result,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,65 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { PieceAuth } from '@activepieces/pieces-framework';
|
||||
import { airtopApiCall } from './client';
|
||||
|
||||
export const airtopAuth = PieceAuth.SecretText({
|
||||
displayName: 'API Key',
|
||||
description: `
|
||||
Enter your Airtop API key. You can get your API key from the [Airtop Dashboard](https://portal.airtop.ai/api-keys).
|
||||
|
||||
**How to get your API key:**
|
||||
1. Go to the [Airtop Dashboard](https://portal.airtop.ai/api-keys)
|
||||
2. Sign in to your account
|
||||
3. Navigate to API Keys section
|
||||
4. Create a new API key or copy an existing one
|
||||
5. Paste the key here
|
||||
`,
|
||||
required: true,
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
const response = await airtopApiCall({
|
||||
apiKey: auth as string,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/sessions',
|
||||
});
|
||||
|
||||
if (response && typeof response === 'object') {
|
||||
return {
|
||||
valid: true,
|
||||
message: 'API key validated successfully. Connected to Airtop.'
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API response format. Please check your API key.',
|
||||
};
|
||||
} catch (error: any) {
|
||||
if (error.message.includes('Authentication failed')) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API key. Please check your API key and try again.',
|
||||
};
|
||||
}
|
||||
|
||||
if (error.message.includes('Network')) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Network error. Please check your internet connection and try again.',
|
||||
};
|
||||
}
|
||||
|
||||
if (error.message.includes('429')) {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Rate limit exceeded. Please wait a moment and try again.',
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
valid: false,
|
||||
error: `Authentication failed: ${error.message}. Please verify your API key is correct and has the necessary permissions.`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,110 @@
|
||||
import {
|
||||
httpClient,
|
||||
HttpMessageBody,
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const BASE_URL = 'https://api.airtop.ai/api/v1';
|
||||
|
||||
export type AirtopApiCallParams = {
|
||||
apiKey: string;
|
||||
method: HttpMethod;
|
||||
resourceUri: string;
|
||||
query?: Record<string, string | number | string[] | undefined>;
|
||||
body?: any;
|
||||
};
|
||||
|
||||
export type AirtopApiResponse<T = any> = {
|
||||
data?: T;
|
||||
message?: string;
|
||||
error?: string;
|
||||
statusCode?: number;
|
||||
};
|
||||
|
||||
export type AirtopSession = {
|
||||
id: string;
|
||||
status: 'active' | 'inactive' | 'terminated' | 'expired';
|
||||
createdAt?: string;
|
||||
configuration?: any;
|
||||
};
|
||||
|
||||
export type AirtopWindow = {
|
||||
windowId: string;
|
||||
targetId: string;
|
||||
status?: string;
|
||||
url?: string;
|
||||
};
|
||||
|
||||
export type AirtopFile = {
|
||||
id: string;
|
||||
fileName: string;
|
||||
fileType: string;
|
||||
size?: number;
|
||||
createdAt?: string;
|
||||
};
|
||||
|
||||
|
||||
export async function airtopApiCall<T extends HttpMessageBody>({
|
||||
apiKey,
|
||||
method,
|
||||
resourceUri,
|
||||
query,
|
||||
body,
|
||||
}: AirtopApiCallParams): Promise<T> {
|
||||
const qs: QueryParams = {};
|
||||
|
||||
if (query) {
|
||||
for (const [key, value] of Object.entries(query)) {
|
||||
if (value !== null && value !== undefined) {
|
||||
qs[key] = String(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const request: HttpRequest = {
|
||||
method,
|
||||
url: BASE_URL + resourceUri,
|
||||
headers: {
|
||||
Authorization: `Bearer ${apiKey}`,
|
||||
'Content-Type': 'application/json',
|
||||
'User-Agent': 'Activepieces-Airtop-Integration',
|
||||
},
|
||||
queryParams: qs,
|
||||
body,
|
||||
};
|
||||
|
||||
try {
|
||||
const response = await httpClient.sendRequest<T>(request);
|
||||
return response.body;
|
||||
} catch (error: any) {
|
||||
if (error.response?.status === 401 || error.response?.status === 403) {
|
||||
throw new Error('Authentication failed. Please check your API key.');
|
||||
}
|
||||
|
||||
if (error.response?.status === 429) {
|
||||
throw new Error('Rate limit exceeded. Please wait a moment and try again.');
|
||||
}
|
||||
|
||||
if (error.response?.status >= 400 && error.response?.status < 500) {
|
||||
throw new Error(`Request failed: ${error.response?.body?.message || error.message}`);
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function extractApiData<T>(response: any, fallback: T[] = []): T[] {
|
||||
if (!response) return fallback;
|
||||
|
||||
// Handle different response structures
|
||||
if (Array.isArray(response)) return response;
|
||||
if (response.data && Array.isArray(response.data)) return response.data;
|
||||
if (response.data?.sessions && Array.isArray(response.data.sessions)) return response.data.sessions;
|
||||
if (response.data?.windows && Array.isArray(response.data.windows)) return response.data.windows;
|
||||
if (response.data?.files && Array.isArray(response.data.files)) return response.data.files;
|
||||
|
||||
return fallback;
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
import { HttpMethod } from '@activepieces/pieces-common';
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
import { airtopApiCall, extractApiData, AirtopSession, AirtopWindow, AirtopFile } from './client';
|
||||
import { airtopAuth } from './auth';
|
||||
|
||||
|
||||
export const sessionId = Property.Dropdown({
|
||||
auth: airtopAuth,
|
||||
displayName: 'Session',
|
||||
description: 'Select an active Airtop session to use for browser automation',
|
||||
refreshers: [],
|
||||
required: true,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Connect your Airtop account to load sessions',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await airtopApiCall<any>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/sessions',
|
||||
});
|
||||
|
||||
const sessions = extractApiData<AirtopSession>(response);
|
||||
|
||||
if (sessions.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: 'No active sessions found. Create a session first.',
|
||||
};
|
||||
}
|
||||
|
||||
const sortedSessions = sessions.sort((a, b) => {
|
||||
if (a.status === 'active' && b.status !== 'active') return -1;
|
||||
if (a.status !== 'active' && b.status === 'active') return 1;
|
||||
return 0;
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: sortedSessions.map((session) => ({
|
||||
label: `${session.id} (${session.status})`,
|
||||
value: session.id,
|
||||
})),
|
||||
placeholder: 'Select a session',
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error loading sessions: ${error.message}`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
export const windowId = Property.Dropdown({
|
||||
auth: airtopAuth,
|
||||
displayName: 'Window',
|
||||
description: 'Select a browser window within the chosen session',
|
||||
required: true,
|
||||
refreshers: ['sessionId'],
|
||||
options: async ({ auth, sessionId }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Connect your Airtop account first',
|
||||
};
|
||||
}
|
||||
|
||||
if (!sessionId) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Select a session first to load windows',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await airtopApiCall<any>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/sessions/${sessionId}/windows`,
|
||||
});
|
||||
|
||||
const windows = extractApiData<AirtopWindow>(response);
|
||||
|
||||
if (windows.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: 'No browser windows found in this session',
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: windows.map((window) => ({
|
||||
label: `${window.windowId}${window.url ? ` - ${window.url}` : ''} (${window.targetId})`,
|
||||
value: window.windowId,
|
||||
})),
|
||||
placeholder: 'Select a browser window',
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error loading windows: ${error.message}`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
export const fileId = Property.Dropdown({
|
||||
auth: airtopAuth,
|
||||
displayName: 'File',
|
||||
description: 'Select a file that has been uploaded to Airtop',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Connect your Airtop account to load files',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await airtopApiCall<any>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/files',
|
||||
});
|
||||
|
||||
const files = extractApiData<AirtopFile>(response);
|
||||
|
||||
if (files.length === 0) {
|
||||
return {
|
||||
disabled: false,
|
||||
options: [],
|
||||
placeholder: 'No files found. Upload a file first.',
|
||||
};
|
||||
}
|
||||
|
||||
const sortedFiles = files.sort((a, b) => {
|
||||
if (a.createdAt && b.createdAt) {
|
||||
return new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime();
|
||||
}
|
||||
return 0;
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: sortedFiles.map((file) => {
|
||||
let label = `${file.fileName} (${file.fileType})`;
|
||||
if (file.size) {
|
||||
const sizeInKB = Math.round(file.size / 1024);
|
||||
label += ` - ${sizeInKB}KB`;
|
||||
}
|
||||
return {
|
||||
label,
|
||||
value: file.id,
|
||||
};
|
||||
}),
|
||||
placeholder: 'Select a file',
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error loading files: ${error.message}`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
export const createSessionSelector = (displayName: string, description: string) => {
|
||||
return Property.Dropdown({
|
||||
auth: airtopAuth,
|
||||
displayName,
|
||||
description,
|
||||
refreshers: [],
|
||||
required: true,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Connect your Airtop account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await airtopApiCall<any>({
|
||||
apiKey: auth.secret_text,
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/sessions',
|
||||
});
|
||||
|
||||
const sessions = extractApiData<AirtopSession>(response);
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: sessions.map((session) => ({
|
||||
label: `${session.id} (${session.status})`,
|
||||
value: session.id,
|
||||
})),
|
||||
placeholder: sessions.length === 0 ? 'No sessions available' : 'Select a session',
|
||||
};
|
||||
} catch (error: any) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: `Error: ${error.message}`,
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"extends": "../../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"importHelpers": true,
|
||||
"noImplicitOverride": true,
|
||||
"noImplicitReturns": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noPropertyAccessFromIndexSignature": true
|
||||
},
|
||||
"files": [],
|
||||
"include": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.lib.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../../../../dist/out-tsc",
|
||||
"declaration": true,
|
||||
"types": ["node"]
|
||||
},
|
||||
"include": ["src/**/*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user