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,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "Dateikonvertierung und -verarbeitungsplattform, die 200 + Formate unterstützt",
|
||||
"Region": "Region",
|
||||
"CloudConvert processing region": "Verarbeitungsregion CloudConvert",
|
||||
"Auto (Nearest)": "Auto (am schnellsten)",
|
||||
"EU Central (Germany)": "EU Zentral (Deutschland)",
|
||||
"US East (Virginia)": "US-Osten (Virginia)",
|
||||
"Connect your CloudConvert account using OAuth2": "Verbinden Sie Ihr CloudConvert-Konto mit OAuth2",
|
||||
"Convert File": "Datei konvertieren",
|
||||
"Capture Website": "Webseite erfassen",
|
||||
"Merge Files to PDF": "Dateien zu PDF zusammenführen",
|
||||
"Download a File": "Datei herunterladen",
|
||||
"Archive File": "Archivdatei",
|
||||
"Optimize File": "Datei optimieren",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Erstellen Sie eine einfache Konvertierungsaufgabe für eine einzelne Datei mit dem gewünschten Ausgabeformat",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Webseite als PDF, Screenshot PNG, oder JPG von einer URL aufnehmen",
|
||||
"Combine multiple documents/images into a single PDF": "Mehrere Dokumente/Bilder zu einem einzigen PDF kombinieren",
|
||||
"Downloads output from a completed task": "Download-Ausgabe einer erledigten Aufgabe",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Erstellt ein ZIP, RAR, 7Z, TAR, TAR.GZ oder TAR.BZ2 Archiv",
|
||||
"Creates a task to optimize and compress a file": "Erstellt eine Aufgabe zum Optimieren und Komprimieren einer Datei",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Import Method": "Import-Methode",
|
||||
"File": "Datei",
|
||||
"File URL": "Datei-URL",
|
||||
"Stored File ID": "Gespeicherte Datei-ID",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Ausgabeformat",
|
||||
"Output Filename": "Dateiname ausgeben",
|
||||
"Engine": "Motor",
|
||||
"Engine Version": "Engine Version",
|
||||
"Timeout (seconds)": "Timeout (Sekunden)",
|
||||
"Wait for Completion": "Warten auf Fertigstellung",
|
||||
"Store File": "Datei speichern",
|
||||
"Website URL": "Website-URL",
|
||||
"Pages": "Seiten",
|
||||
"Zoom Level": "Zoomstufe",
|
||||
"Page Width (cm)": "Seitenbreite (cm)",
|
||||
"Page Height (cm)": "Seitenhöhe (cm)",
|
||||
"Page Format": "Seitenformat",
|
||||
"Page Orientation": "Seitenausrichtung",
|
||||
"Top Margin (mm)": "Oberer Rand (mm)",
|
||||
"Bottom Margin (mm)": "Unterer Rand (mm)",
|
||||
"Left Margin (mm)": "Linker Rand (mm)",
|
||||
"Right Margin (mm)": "Rechter Rand (mm)",
|
||||
"Print Background": "Hintergrund drucken",
|
||||
"Display Header/Footer": "Header/Fußzeile anzeigen",
|
||||
"Header Template": "Kopfzeile Vorlage",
|
||||
"Footer Template": "Fußzeile-Vorlage",
|
||||
"Wait Until": "Warten bis",
|
||||
"Wait for Element": "Warte auf Element",
|
||||
"Wait Time (ms)": "Wartezeit (ms)",
|
||||
"CSS Media Type": "CSS-Medientyp",
|
||||
"Files to Merge": "Dateien zum Zusammenführen",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Zusätzliche Daten einbeziehen",
|
||||
"Files to Archive": "Zu archivierende Dateien",
|
||||
"Archive Format": "Archivformat",
|
||||
"Archive Filename": "Archiv-Dateiname",
|
||||
"Optimization Profile": "Optimierungsprofil",
|
||||
"Flatten Signatures": "Signaturen flachern",
|
||||
"Color Space": "Farbraum",
|
||||
"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)",
|
||||
"How to import the file for conversion": "Wie man die Datei für die Konvertierung importiert",
|
||||
"File to upload and convert (select from your device)": "Datei zum Hochladen und Konvertieren (Auswahl von Ihrem Gerät)",
|
||||
"URL of the file to convert": "URL der zu konvertierenden Datei",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID einer zuvor gespeicherten Datei in Activepieces zum Konvertieren",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "Das Format der Eingabedatei. Lassen Sie als \"Auto-Erkennung\" um CloudConvert automatisch erkennen zu lassen",
|
||||
"The target format to convert to": "Das zu konvertierende Zielformat",
|
||||
"Choose a filename (including extension) for the output file": "Wählen Sie einen Dateinamen (einschließlich Erweiterung) für die Ausgabedatei",
|
||||
"Use a specific engine for the conversion": "Verwende eine bestimmte Engine für die Konvertierung",
|
||||
"Use a specific engine version for the conversion": "Verwende eine bestimmte Engine Version für die Konvertierung",
|
||||
"Timeout in seconds after which the task will be cancelled": "Timeout in Sekunden, nach der die Aufgabe abgebrochen wird",
|
||||
"Wait for the conversion to complete before returning": "Warten Sie, bis die Konvertierung abgeschlossen ist, bevor Sie zurückkehren",
|
||||
"Download and store the converted file in Activepieces": "Die konvertierte Datei in Activepieces herunterladen und speichern",
|
||||
"The URL of the website to capture": "Die URL der zu erfassenden Webseite",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Seitenbereich (z.B. 1-3) oder durch Komma getrennte Liste (z.B. 1,2,3) von Seiten",
|
||||
"Zoom level to display the website. Defaults to 1": "Zoomstufe um die Webseite anzuzeigen. Standard ist 1",
|
||||
"Page width in cm": "Seitenbreite in cm",
|
||||
"Page height in cm": "Seitenhöhe in cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Papierformat beim Drucken eines PDF. Überschreibt page_width und page_height",
|
||||
"Page orientation for PDF output": "Seitenausrichtung für PDF-Ausgabe",
|
||||
"Page top margin in mm": "Seitenoberrand in mm",
|
||||
"Page bottom margin in mm": "Seitenrand unten in mm",
|
||||
"Page left margin in mm": "Seite linker Rand in mm",
|
||||
"Page right margin in mm": "Seitenrechter Rand in mm",
|
||||
"Render the background of websites": "Den Hintergrund von Webseiten anzeigen",
|
||||
"Create a header and a footer with the URL and page numbers": "Eine Kopfzeile und eine Fußzeile mit URL und Seitennummern erstellen",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "HTML-Template für den Druckkopf mit Klassen: Datum, Titel, Url, pageNumber, Total Pages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "HTML-Template für den Print-Footer mit Klassen: Datum, Titel, Url, pageNumber, Total Pages",
|
||||
"When to consider navigation finished": "Wann die Navigation abgeschlossen ist",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "CSS-Selektor auf das Element warten soll (z.B. \"body\" oder \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "Zusätzliche Zeit in ms nach dem Laden der Seite warten",
|
||||
"Changes the CSS media type of the page": "Ändert den CSS-Medientyp der Seite",
|
||||
"Timeout in seconds after the task will be cancelled": "Timeout in Sekunden nach dem Abbrechen der Aufgabe",
|
||||
"Wait for the capture to complete before returning": "Warten Sie, bis die Aufnahme abgeschlossen ist, bevor Sie zurückkehren",
|
||||
"Download and store the captured file in Activepieces": "Die aufgenommene Datei herunterladen und in Activepieces speichern",
|
||||
"How to import the files for merging": "Importieren der Dateien zum Zusammenführen",
|
||||
"List of files to merge into a single PDF": "Liste der Dateien zum Zusammenführen in einem einzigen PDF",
|
||||
"Wait for the merge to complete before returning": "Warten Sie, bis die Zusammenführung abgeschlossen ist, bevor Sie zurückkehren",
|
||||
"Download and store the merged PDF in Activepieces": "Laden und speichern Sie die zusammengeführte PDF in Activepieces",
|
||||
"ID of the CloudConvert task to retrieve": "ID der abzurufenden CloudConvert-Aufgabe",
|
||||
"Additional data to include in the response": "Zusätzliche Daten, die in die Antwort aufgenommen werden sollen",
|
||||
"Download and store the output files in Activepieces": "Die Ausgabedateien in Activepieces herunterladen und speichern",
|
||||
"How to import the files for archiving": "Importieren der Dateien für die Archivierung",
|
||||
"List of files to include in the archive": "Liste der Dateien die in das Archiv aufgenommen werden sollen",
|
||||
"The archive format to create": "Das zu erstellende Archivformat",
|
||||
"Choose a filename (including extension) for the archive file": "Wählen Sie einen Dateinamen (einschließlich der Erweiterung) für die Archivdatei",
|
||||
"Use a specific engine for the archiving": "Verwende eine bestimmte Engine für die Archivierung",
|
||||
"Use a specific engine version for the archiving": "Verwende eine bestimmte Engine Version für die Archivierung",
|
||||
"Wait for the archive creation to complete before returning": "Warten Sie, bis die Erstellung des Archivs abgeschlossen ist, bevor Sie zurückkehren",
|
||||
"Download and store the created archive in Activepieces": "Das erstellte Archiv in Activepieces herunterladen und speichern",
|
||||
"How to import the file for optimization": "Wie man die Datei für die Optimierung importiert",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "Datei zum Hochladen und Optimieren (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL der zu optimierenden Datei",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID einer zuvor gespeicherten Datei in Activepieces zum Optimieren",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "Das aktuelle Format der Datei. Falls nicht gesetzt, wird die Erweiterung der Eingabedatei verwendet",
|
||||
"Optimization profile for specific target needs": "Optimierungsprofil für spezifische Zielanforderungen",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Sichtbare Signaturen flachern und als nicht editierbare Grafik behalten",
|
||||
"Color space of raster images": "Farbraum der Rasterbilder",
|
||||
"Use a specific engine for the optimization": "Eine bestimmte Engine für die Optimierung verwenden",
|
||||
"Use a specific engine version for the optimization": "Verwenden Sie eine bestimmte Engine Version für die Optimierung",
|
||||
"Wait for the optimization to complete before returning": "Warten Sie, bis die Optimierung abgeschlossen ist, bevor Sie zurückkehren",
|
||||
"Download and store the optimized file in Activepieces": "Laden und speichern Sie die optimierte Datei in Activepieces",
|
||||
"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..",
|
||||
"File Upload": "Datei hochladen",
|
||||
"Auto-detect": "Auto-Erkennung",
|
||||
"PDF": "PDF",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOC",
|
||||
"TXT": "TXT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "Andere",
|
||||
"Letter": "Brief",
|
||||
"Legal": "Rechtlich",
|
||||
"Tabloid": "Tabloid",
|
||||
"Ledger": "Ledger",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "Hochformat",
|
||||
"Landscape": "Querformat",
|
||||
"Load Event": "Ereignis laden",
|
||||
"DOMContentLoaded": "DOMContentLoaded",
|
||||
"Network Idle (0 connections)": "Netzwerk Leerlauf (0 Verbindungen)",
|
||||
"Network Idle (2 connections)": "Netzwerk Leerlauf (2 Verbindungen)",
|
||||
"Print": "Drucken",
|
||||
"Screen": "Bildschirm",
|
||||
"Chrome (Default)": "Chrome (Standard)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3-Höhen (Standard)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "ZIP",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "TAR",
|
||||
"TAR.GZ": "ZIEL.GZ",
|
||||
"TAR.BZ2": "ZAR.BZ2",
|
||||
"7-Zip": "7-Zip",
|
||||
"Archive Tool (Default)": "Archivwerkzeug (Standard)",
|
||||
"Web - Remove redundant data for the web": "Web - redundante Daten für das Web entfernen",
|
||||
"Print - Optimized for printing": "Drucken - Optimiert für Drucken",
|
||||
"Archive - Optimized for archiving purposes": "Archiv - Optimiert für Archivierung",
|
||||
"MRC - Optimized for scanned images": "MRC - Optimiert für gescannte Bilder",
|
||||
"Max - Maximal size reduction": "Max. - Maximale Größenreduzierung",
|
||||
"Unchanged": "Unverändert",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3-Höhen",
|
||||
"PDF Tools": "PDF-Tools",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Job Event": "Neues Job-Ereignis",
|
||||
"Job Finished": "Job abgeschlossen",
|
||||
"Job Failed": "Job fehlgeschlagen",
|
||||
"Triggers when a new job has been created": "Löst aus, wenn ein neuer Job erstellt wurde",
|
||||
"Triggers when a CloudConvert job has been completed": "Löst aus, wenn ein CloudConvert-Job abgeschlossen wurde",
|
||||
"Triggers when a CloudConvert job has failed": "Löst aus, wenn ein CloudConvert-Job fehlgeschlagen ist"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "Plataforma de conversión y procesamiento de archivos que soporta más de 200 formatos",
|
||||
"Region": "Región",
|
||||
"CloudConvert processing region": "Región de procesamiento CloudConvert",
|
||||
"Auto (Nearest)": "Auto (más pequeño)",
|
||||
"EU Central (Germany)": "UE Central (Alemania)",
|
||||
"US East (Virginia)": "EEUU Este (Virginia)",
|
||||
"Connect your CloudConvert account using OAuth2": "Conecte su cuenta CloudConvert usando OAuth2",
|
||||
"Convert File": "Convertir archivo",
|
||||
"Capture Website": "Capturar sitio web",
|
||||
"Merge Files to PDF": "Fusionar archivos con PDF",
|
||||
"Download a File": "Descargar un archivo",
|
||||
"Archive File": "Archivar archivo",
|
||||
"Optimize File": "Optimizar archivo",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Crear una tarea básica de conversión de archivo para un solo archivo con el formato de salida deseado",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Capturar página web como PDF, captura de pantalla PNG, o JPG desde una URL",
|
||||
"Combine multiple documents/images into a single PDF": "Combinar múltiples documentos/imágenes en un solo PDF",
|
||||
"Downloads output from a completed task": "Descargar salida de una tarea completada",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Crea un archivo ZIP, RAR, 7Z, TAR, TAR.GZ o TAR.BZ2",
|
||||
"Creates a task to optimize and compress a file": "Crea una tarea para optimizar y comprimir un archivo",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Import Method": "Importar método",
|
||||
"File": "Archivo",
|
||||
"File URL": "URL del archivo",
|
||||
"Stored File ID": "ID de archivo almacenado",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Formato de salida",
|
||||
"Output Filename": "Nombre de archivo de salida",
|
||||
"Engine": "Motor",
|
||||
"Engine Version": "Versión del motor",
|
||||
"Timeout (seconds)": "Tiempo agotado (segundos)",
|
||||
"Wait for Completion": "Espere a completar",
|
||||
"Store File": "Guardar archivo",
|
||||
"Website URL": "URL del sitio web",
|
||||
"Pages": "Páginas",
|
||||
"Zoom Level": "Nivel de zoom",
|
||||
"Page Width (cm)": "Ancho de página (cm)",
|
||||
"Page Height (cm)": "Altura de página (cm)",
|
||||
"Page Format": "Formato de página",
|
||||
"Page Orientation": "Orientación de página",
|
||||
"Top Margin (mm)": "Margen superior (mm)",
|
||||
"Bottom Margin (mm)": "Margen Inferior (mm)",
|
||||
"Left Margin (mm)": "Margen izquierdo (mm)",
|
||||
"Right Margin (mm)": "Margen derecho (mm)",
|
||||
"Print Background": "Imprimir fondo",
|
||||
"Display Header/Footer": "Mostrar cabeza/pie de página",
|
||||
"Header Template": "Plantilla de cabecera",
|
||||
"Footer Template": "Plantilla de pie de página",
|
||||
"Wait Until": "Esperar hasta",
|
||||
"Wait for Element": "Esperar elemento",
|
||||
"Wait Time (ms)": "Tiempo de espera (ms)",
|
||||
"CSS Media Type": "Tipo de medio CSS",
|
||||
"Files to Merge": "Archivos a combinar",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Incluye datos adicionales",
|
||||
"Files to Archive": "Archivos a archivar",
|
||||
"Archive Format": "Formato de archivo",
|
||||
"Archive Filename": "Nombre de archivo",
|
||||
"Optimization Profile": "Perfil de optimización",
|
||||
"Flatten Signatures": "Aplanar firmas",
|
||||
"Color Space": "Espacio de color",
|
||||
"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)",
|
||||
"How to import the file for conversion": "Cómo importar el archivo para la conversión",
|
||||
"File to upload and convert (select from your device)": "Archivo para cargar y convertir (seleccionar desde tu dispositivo)",
|
||||
"URL of the file to convert": "URL del archivo a convertir",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID de un archivo previamente almacenado en Activepieces para convertir",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "El formato del archivo de entrada. Dejar como \"Autodetectar\" para permitir que CloudConvert detecte automáticamente",
|
||||
"The target format to convert to": "El formato de destino a convertir a",
|
||||
"Choose a filename (including extension) for the output file": "Elija un nombre de archivo (incluida la extensión) para el archivo de salida",
|
||||
"Use a specific engine for the conversion": "Usar un motor específico para la conversión",
|
||||
"Use a specific engine version for the conversion": "Utilice una versión específica del motor para la conversión",
|
||||
"Timeout in seconds after which the task will be cancelled": "Tiempo de espera en segundos tras el cual la tarea será cancelada",
|
||||
"Wait for the conversion to complete before returning": "Espere a que la conversión se complete antes de regresar",
|
||||
"Download and store the converted file in Activepieces": "Descargar y guardar el archivo convertido en Activepieces",
|
||||
"The URL of the website to capture": "La URL del sitio web a capturar",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Rango de página (por ejemplo, 1-3) o lista separada por comas (por ejemplo, 1,2,3) de páginas",
|
||||
"Zoom level to display the website. Defaults to 1": "Nivel de zoom para mostrar el sitio web. Por defecto 1",
|
||||
"Page width in cm": "Ancho de la página en cm",
|
||||
"Page height in cm": "Altura de la página en cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Tipo de formato de papel al imprimir un PDF. Reemplaza page_width y page_height",
|
||||
"Page orientation for PDF output": "Orientación de la página para salida PDF",
|
||||
"Page top margin in mm": "Margen de página superior en mm",
|
||||
"Page bottom margin in mm": "Margen inferior página en mm",
|
||||
"Page left margin in mm": "Margen izquierdo de página en mm",
|
||||
"Page right margin in mm": "Margen derecho de página en mm",
|
||||
"Render the background of websites": "Procesar el fondo de los sitios web",
|
||||
"Create a header and a footer with the URL and page numbers": "Crear un encabezado y un pie con la URL y los números de página",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "Plantilla HTML para el encabezado de impresión con clases: fecha, título, url, pageNumber, totalPages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "Plantilla HTML para el pie de página de impresión con clases: fecha, título, url, pageNumber, totalPages",
|
||||
"When to consider navigation finished": "Cuándo considerar la navegación terminada",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "Selector CSS para que el elemento espere (por ejemplo, \"body\" o \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "Tiempo adicional en ms para esperar después de la carga de la página",
|
||||
"Changes the CSS media type of the page": "Cambia el tipo de medio CSS de la página",
|
||||
"Timeout in seconds after the task will be cancelled": "Tiempo de espera en segundos después de que la tarea será cancelada",
|
||||
"Wait for the capture to complete before returning": "Espere a que se complete la captura antes de regresar",
|
||||
"Download and store the captured file in Activepieces": "Descargar y guardar el archivo capturado en Activepieces",
|
||||
"How to import the files for merging": "Cómo importar los archivos para fusionar",
|
||||
"List of files to merge into a single PDF": "Lista de archivos a fusionar en un solo PDF",
|
||||
"Wait for the merge to complete before returning": "Espere a que se complete la fusión antes de regresar",
|
||||
"Download and store the merged PDF in Activepieces": "Descargar y guardar el PDF fusionado en Activepieces",
|
||||
"ID of the CloudConvert task to retrieve": "ID de la tarea CloudConvert a recuperar",
|
||||
"Additional data to include in the response": "Datos adicionales a incluir en la respuesta",
|
||||
"Download and store the output files in Activepieces": "Descargar y guardar los archivos de salida en Activepieces",
|
||||
"How to import the files for archiving": "Cómo importar los archivos para archivar",
|
||||
"List of files to include in the archive": "Lista de archivos a incluir en el archivo",
|
||||
"The archive format to create": "El formato de archivo a crear",
|
||||
"Choose a filename (including extension) for the archive file": "Elija un nombre de archivo (incluida la extensión) para el archivo",
|
||||
"Use a specific engine for the archiving": "Usar un motor específico para el archivo",
|
||||
"Use a specific engine version for the archiving": "Utilice una versión específica del motor para el archivo",
|
||||
"Wait for the archive creation to complete before returning": "Espere a que se complete la creación del archivo antes de regresar",
|
||||
"Download and store the created archive in Activepieces": "Descargar y almacenar el archivo creado en Activepieces",
|
||||
"How to import the file for optimization": "Cómo importar el archivo para optimización",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "Archivo para subir y optimizar (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL del archivo a optimizar",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID de un archivo previamente almacenado en Activepieces para optimizar",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "El formato actual del archivo. Si no se establece, se utiliza la extensión del archivo de entrada",
|
||||
"Optimization profile for specific target needs": "Perfil de optimización para necesidades específicas de objetivo",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Aplanar firmas visibles y mantenerlas como gráficos no editables",
|
||||
"Color space of raster images": "Espacio de color de las imágenes raster",
|
||||
"Use a specific engine for the optimization": "Utilice un motor específico para la optimización",
|
||||
"Use a specific engine version for the optimization": "Utilice una versión específica del motor para la optimización",
|
||||
"Wait for the optimization to complete before returning": "Espere a que se complete la optimización antes de regresar",
|
||||
"Download and store the optimized file in Activepieces": "Descargar y almacenar el archivo optimizado en Activepieces",
|
||||
"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.",
|
||||
"File Upload": "Subir archivo",
|
||||
"Auto-detect": "Autodetectar",
|
||||
"PDF": "DF",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOC",
|
||||
"TXT": "TXT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "Otro",
|
||||
"Letter": "Letra",
|
||||
"Legal": "Legal",
|
||||
"Tabloid": "Tabloide",
|
||||
"Ledger": "Libro",
|
||||
"A0": "A0",
|
||||
"A1": "R1",
|
||||
"A2": "R2",
|
||||
"A3": "R3",
|
||||
"A4": "R4",
|
||||
"A5": "R5",
|
||||
"A6": "R6",
|
||||
"Portrait": "Retrato",
|
||||
"Landscape": "Paisaje",
|
||||
"Load Event": "Cargar evento",
|
||||
"DOMContentLoaded": "DOMContentCargado",
|
||||
"Network Idle (0 connections)": "Red inactiva (0 conexiones)",
|
||||
"Network Idle (2 connections)": "Red inactiva (2 conexiones)",
|
||||
"Print": "Imprimir",
|
||||
"Screen": "Pantalla",
|
||||
"Chrome (Default)": "Chrome (por defecto)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3-Alturas (por defecto)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poblador",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "ZIP",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "TAR",
|
||||
"TAR.GZ": "TAR.GZ",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "7-Zip",
|
||||
"Archive Tool (Default)": "Herramienta de archivo (por defecto)",
|
||||
"Web - Remove redundant data for the web": "Web - Eliminar datos redundantes de la web",
|
||||
"Print - Optimized for printing": "Impresión - Optimizada para impresión",
|
||||
"Archive - Optimized for archiving purposes": "Archivo - Optimizado para fines de archivo",
|
||||
"MRC - Optimized for scanned images": "MRC - Optimizado para imágenes escaneadas",
|
||||
"Max - Maximal size reduction": "Máximo - reducción máxima del tamaño",
|
||||
"Unchanged": "Sin cambios",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3-Alturas",
|
||||
"PDF Tools": "Herramientas PDF",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Job Event": "Nuevo Evento de Trabajo",
|
||||
"Job Finished": "Trabajo terminado",
|
||||
"Job Failed": "Trabajo fallido",
|
||||
"Triggers when a new job has been created": "Dispara cuando se ha creado un nuevo trabajo",
|
||||
"Triggers when a CloudConvert job has been completed": "Se activa cuando se ha completado un trabajo CloudConvert",
|
||||
"Triggers when a CloudConvert job has failed": "Dispara cuando un trabajo CloudConvert ha fallado"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "Plateforme de conversion et de traitement de fichiers prenant en charge plus de 200 formats",
|
||||
"Region": "Région",
|
||||
"CloudConvert processing region": "Région de traitement CloudConvert",
|
||||
"Auto (Nearest)": "Auto (Prochain)",
|
||||
"EU Central (Germany)": "Europe centrale (Allemagne)",
|
||||
"US East (Virginia)": "US East (Virginie)",
|
||||
"Connect your CloudConvert account using OAuth2": "Connectez votre compte CloudConvert avec OAuth2",
|
||||
"Convert File": "Convertir le fichier",
|
||||
"Capture Website": "Capturer le site Web",
|
||||
"Merge Files to PDF": "Fusionner les fichiers en PDF",
|
||||
"Download a File": "Télécharger un fichier",
|
||||
"Archive File": "Archiver le fichier",
|
||||
"Optimize File": "Optimiser le fichier",
|
||||
"Custom API Call": "Appel d'API personnalisé",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Créer une tâche de conversion de fichier de base pour un seul fichier au format de sortie désiré",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Capturer une page Web en PDF, une capture d'écran PNG, ou JPG à partir d'une URL",
|
||||
"Combine multiple documents/images into a single PDF": "Combiner plusieurs documents/images en un seul PDF",
|
||||
"Downloads output from a completed task": "Télécharger la sortie d'une tâche terminée",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Crée une archive ZIP, RAR, 7Z, TAR, TAR.GZ ou TAR.BZ2",
|
||||
"Creates a task to optimize and compress a file": "Crée une tâche pour optimiser et compresser un fichier",
|
||||
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
|
||||
"Import Method": "Méthode d'importation",
|
||||
"File": "Ficher",
|
||||
"File URL": "URL du fichier",
|
||||
"Stored File ID": "ID du fichier stocké",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Format de sortie",
|
||||
"Output Filename": "Nom du fichier de sortie",
|
||||
"Engine": "Moteur",
|
||||
"Engine Version": "Version du moteur",
|
||||
"Timeout (seconds)": "Délai d'attente (secondes)",
|
||||
"Wait for Completion": "Attendre l'achèvement",
|
||||
"Store File": "Fichier de stockage",
|
||||
"Website URL": "URL du site web",
|
||||
"Pages": "Pages",
|
||||
"Zoom Level": "Niveau de zoom",
|
||||
"Page Width (cm)": "Largeur de la page (cm)",
|
||||
"Page Height (cm)": "Hauteur de la page (cm)",
|
||||
"Page Format": "Format de la page",
|
||||
"Page Orientation": "Orientation de la page",
|
||||
"Top Margin (mm)": "Marge supérieure (mm)",
|
||||
"Bottom Margin (mm)": "Marge du bas (mm)",
|
||||
"Left Margin (mm)": "Marge gauche (mm)",
|
||||
"Right Margin (mm)": "Marge droite (mm)",
|
||||
"Print Background": "Imprimer l'arrière-plan",
|
||||
"Display Header/Footer": "Afficher en-tête/pied de page",
|
||||
"Header Template": "Modèle d'en-tête",
|
||||
"Footer Template": "Modèle de pied de page",
|
||||
"Wait Until": "Attendre jusqu'à",
|
||||
"Wait for Element": "Attendre l'élément",
|
||||
"Wait Time (ms)": "Temps d'attente (ms)",
|
||||
"CSS Media Type": "Type de média CSS",
|
||||
"Files to Merge": "Fichiers à fusionner",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Inclure les données supplémentaires",
|
||||
"Files to Archive": "Fichiers à archiver",
|
||||
"Archive Format": "Format d'archive",
|
||||
"Archive Filename": "Nom du fichier d'archive",
|
||||
"Optimization Profile": "Profil d'optimisation",
|
||||
"Flatten Signatures": "Aplatir les signatures",
|
||||
"Color Space": "Espace de couleurs",
|
||||
"Method": "Méthode",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Body",
|
||||
"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)",
|
||||
"How to import the file for conversion": "Comment importer le fichier pour la conversion",
|
||||
"File to upload and convert (select from your device)": "Fichier à télécharger et à convertir (sélectionnez depuis votre appareil)",
|
||||
"URL of the file to convert": "URL du fichier à convertir",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID d'un fichier précédemment stocké dans Activepieces à convertir",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "Le format du fichier d'entrée. Laisser comme \"Auto-détecter\" pour permettre à CloudConvert de détecter automatiquement",
|
||||
"The target format to convert to": "Le format cible à convertir en",
|
||||
"Choose a filename (including extension) for the output file": "Choisissez un nom de fichier (y compris l'extension) pour le fichier de sortie",
|
||||
"Use a specific engine for the conversion": "Utiliser un moteur spécifique pour la conversion",
|
||||
"Use a specific engine version for the conversion": "Utiliser une version spécifique du moteur pour la conversion",
|
||||
"Timeout in seconds after which the task will be cancelled": "Délai d'attente en secondes après lequel la tâche sera annulée",
|
||||
"Wait for the conversion to complete before returning": "Attendez que la conversion soit terminée avant de revenir",
|
||||
"Download and store the converted file in Activepieces": "Télécharger et stocker le fichier converti dans des Activepieces",
|
||||
"The URL of the website to capture": "L'URL du site à capturer",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Intervalle de pages (par exemple 1-3) ou liste séparée par des virgules (par exemple 1,2,3) des pages",
|
||||
"Zoom level to display the website. Defaults to 1": "Niveau de zoom pour afficher le site web. Par défaut, 1",
|
||||
"Page width in cm": "Largeur de la page en cm",
|
||||
"Page height in cm": "Hauteur de la page en cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Type de format papier lors de l'impression d'un PDF. Remplace page_width et page_height",
|
||||
"Page orientation for PDF output": "Orientation de la page pour la sortie PDF",
|
||||
"Page top margin in mm": "Marge supérieure de la page en mm",
|
||||
"Page bottom margin in mm": "Marge du bas de la page en mm",
|
||||
"Page left margin in mm": "Marge gauche de la page en mm",
|
||||
"Page right margin in mm": "Marge droite de la page en mm",
|
||||
"Render the background of websites": "Afficher l'arrière-plan des sites web",
|
||||
"Create a header and a footer with the URL and page numbers": "Créer un en-tête et un pied de page avec l'URL et les numéros de page",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "Modèle HTML pour l'en-tête d'impression avec les classes: date, titre, url, pageNumber, totalPages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "Modèle HTML pour le pied de page d'impression avec les classes : date, titre, url, pageNumber, totalPages",
|
||||
"When to consider navigation finished": "Quand considérer la navigation est terminée",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "Sélecteur CSS pour l'élément à attendre (par exemple \"body\" ou \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "Temps d'attente supplémentaire en ms après le chargement de la page",
|
||||
"Changes the CSS media type of the page": "Modifie le type de média CSS de la page",
|
||||
"Timeout in seconds after the task will be cancelled": "Délai d'attente en secondes après l'annulation de la tâche",
|
||||
"Wait for the capture to complete before returning": "Attendez que la capture soit terminée avant de revenir",
|
||||
"Download and store the captured file in Activepieces": "Télécharger et stocker le fichier capturé dans Activepieces",
|
||||
"How to import the files for merging": "Comment importer les fichiers à fusionner",
|
||||
"List of files to merge into a single PDF": "Liste des fichiers à fusionner en un seul PDF",
|
||||
"Wait for the merge to complete before returning": "Attendre que la fusion soit terminée avant de revenir",
|
||||
"Download and store the merged PDF in Activepieces": "Télécharger et stocker le PDF fusionné dans des Activepieces",
|
||||
"ID of the CloudConvert task to retrieve": "ID de la tâche CloudConvert à récupérer",
|
||||
"Additional data to include in the response": "Données supplémentaires à inclure dans la réponse",
|
||||
"Download and store the output files in Activepieces": "Télécharger et stocker les fichiers de sortie dans des Activepieces",
|
||||
"How to import the files for archiving": "Comment importer les fichiers à archiver",
|
||||
"List of files to include in the archive": "Liste des fichiers à inclure dans l'archive",
|
||||
"The archive format to create": "Le format d'archive à créer",
|
||||
"Choose a filename (including extension) for the archive file": "Choisissez un nom de fichier (y compris l'extension) pour le fichier d'archive",
|
||||
"Use a specific engine for the archiving": "Utiliser un moteur spécifique pour l'archivage",
|
||||
"Use a specific engine version for the archiving": "Utiliser une version spécifique du moteur pour l'archivage",
|
||||
"Wait for the archive creation to complete before returning": "Attendez que la création de l'archive soit terminée avant de revenir",
|
||||
"Download and store the created archive in Activepieces": "Télécharger et stocker l'archive créée dans Activepieces",
|
||||
"How to import the file for optimization": "Comment importer le fichier pour l'optimisation",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "Fichier à télécharger et optimiser (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL du fichier à optimiser",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID d'un fichier précédemment stocké dans Activepieces pour optimiser",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "Le format actuel du fichier. Si non défini, l'extension du fichier d'entrée est utilisée",
|
||||
"Optimization profile for specific target needs": "Profil d'optimisation pour les besoins spécifiques de la cible",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Aplatir les signatures visibles et les conserver en tant que graphiques non modifiables",
|
||||
"Color space of raster images": "Espace de couleur des images matricielles",
|
||||
"Use a specific engine for the optimization": "Utiliser un moteur spécifique pour l'optimisation",
|
||||
"Use a specific engine version for the optimization": "Utiliser une version spécifique du moteur pour l'optimisation",
|
||||
"Wait for the optimization to complete before returning": "Attendez que l'optimisation soit terminée avant de revenir",
|
||||
"Download and store the optimized file in Activepieces": "Télécharger et stocker le fichier optimisé dans Activepieces",
|
||||
"Authorization headers are injected automatically from your connection.": "Les Headers d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"File Upload": "Envoi de fichier",
|
||||
"Auto-detect": "Détection automatique",
|
||||
"PDF": "PDF",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOC",
|
||||
"TXT": "TXT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "Autres",
|
||||
"Letter": "Lettre",
|
||||
"Legal": "Mentions légales",
|
||||
"Tabloid": "Tabloïde",
|
||||
"Ledger": "Ledger",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "Portrait",
|
||||
"Landscape": "Paysage",
|
||||
"Load Event": "Charger un événement",
|
||||
"DOMContentLoaded": "DOMContentContentChargé",
|
||||
"Network Idle (0 connections)": "Inactivité du réseau (0 connexions)",
|
||||
"Network Idle (2 connections)": "Inactivité du réseau (2 connexions)",
|
||||
"Print": "Imprimer",
|
||||
"Screen": "Ecran",
|
||||
"Chrome (Default)": "Chrome (par défaut)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3 hauteurs (par défaut)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "ZIP",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "TAR",
|
||||
"TAR.GZ": "TAR.GZ",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "7-Zip",
|
||||
"Archive Tool (Default)": "Outil d'archives (par défaut)",
|
||||
"Web - Remove redundant data for the web": "Web - Supprimer les données redondantes pour le web",
|
||||
"Print - Optimized for printing": "Impression - Optimisée pour l'impression",
|
||||
"Archive - Optimized for archiving purposes": "Archive - Optimisé à des fins d'archivage",
|
||||
"MRC - Optimized for scanned images": "MRC - Optimisé pour les images numérisées",
|
||||
"Max - Maximal size reduction": "Max - Réduction de la taille maximale",
|
||||
"Unchanged": "Inchangé",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMJN",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3 hauteurs",
|
||||
"PDF Tools": "Outils PDF",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Job Event": "Nouvel Événement de Job",
|
||||
"Job Finished": "Tâche terminée",
|
||||
"Job Failed": "Tâche échouée",
|
||||
"Triggers when a new job has been created": "Déclenche quand un nouveau job a été créé",
|
||||
"Triggers when a CloudConvert job has been completed": "Déclenche quand une tâche CloudConvert est terminée",
|
||||
"Triggers when a CloudConvert job has failed": "Déclenche quand une tâche CloudConvert a échoué"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "200以上の形式をサポートするファイル変換と処理プラットフォーム",
|
||||
"Region": "地域",
|
||||
"CloudConvert processing region": "CloudConvert 処理領域",
|
||||
"Auto (Nearest)": "自動 (最も近い)",
|
||||
"EU Central (Germany)": "EU中部(ドイツ)",
|
||||
"US East (Virginia)": "US East (Virginia)",
|
||||
"Connect your CloudConvert account using OAuth2": "OAuth2を使用してCloudConvertアカウントを接続する",
|
||||
"Convert File": "ファイルの変換",
|
||||
"Capture Website": "ウェブサイトをキャプチャする",
|
||||
"Merge Files to PDF": "ファイルを PDF にマージ",
|
||||
"Download a File": "ファイルをダウンロード",
|
||||
"Archive File": "アーカイブファイル",
|
||||
"Optimize File": "ファイルの最適化",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Create a basic file conversion task for a single file with desired output format": "必要な出力形式の単一ファイルの基本ファイル変換タスクを作成します。",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "PDF、スクリーンショットPNG、またはURLからJPGとしてウェブページをキャプチャする",
|
||||
"Combine multiple documents/images into a single PDF": "複数のドキュメント/画像を 1 つの PDF にまとめます",
|
||||
"Downloads output from a completed task": "完了したタスクからのダウンロード出力",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "ZIP、RAR、7Z、TAR、TAR.GZまたはTAR.BZ2アーカイブを作成",
|
||||
"Creates a task to optimize and compress a file": "ファイルを最適化して圧縮するタスクを作成します",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Import Method": "インポート方法",
|
||||
"File": "ファイル",
|
||||
"File URL": "ファイル URL",
|
||||
"Stored File ID": "保存されたファイルID",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "出力形式",
|
||||
"Output Filename": "出力ファイル名",
|
||||
"Engine": "エンジン",
|
||||
"Engine Version": "エンジンのバージョン",
|
||||
"Timeout (seconds)": "タイムアウト (秒)",
|
||||
"Wait for Completion": "完了を待つ",
|
||||
"Store File": "ストアファイル",
|
||||
"Website URL": "Website URL",
|
||||
"Pages": "ページ",
|
||||
"Zoom Level": "ズームレベル",
|
||||
"Page Width (cm)": "ページ幅 (cm)",
|
||||
"Page Height (cm)": "ページの高さ (cm)",
|
||||
"Page Format": "ページ形式",
|
||||
"Page Orientation": "ページの向き",
|
||||
"Top Margin (mm)": "上マージン(mm)",
|
||||
"Bottom Margin (mm)": "底マージン(mm)",
|
||||
"Left Margin (mm)": "左マージン(mm)",
|
||||
"Right Margin (mm)": "右マージン(mm)",
|
||||
"Print Background": "背景を印刷",
|
||||
"Display Header/Footer": "ヘッダー/フッター",
|
||||
"Header Template": "ヘッダーテンプレート",
|
||||
"Footer Template": "フッターテンプレート",
|
||||
"Wait Until": "まで待機する",
|
||||
"Wait for Element": "要素を待つ",
|
||||
"Wait Time (ms)": "待機時間 (ms)",
|
||||
"CSS Media Type": "CSS メディアタイプ",
|
||||
"Files to Merge": "マージするファイル",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "追加データを含める",
|
||||
"Files to Archive": "アーカイブするファイル",
|
||||
"Archive Format": "アーカイブ形式",
|
||||
"Archive Filename": "ファイル名をアーカイブ",
|
||||
"Optimization Profile": "最適化プロファイル",
|
||||
"Flatten Signatures": "署名をフラットにする",
|
||||
"Color Space": "カラースペース",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"How to import the file for conversion": "変換のためのファイルをインポートする方法",
|
||||
"File to upload and convert (select from your device)": "アップロードおよび変換するファイル (お使いのデバイスから選択)",
|
||||
"URL of the file to convert": "変換するファイルの URL",
|
||||
"ID of a previously stored file in Activepieces to convert": "Activepiecesに保存されているファイルのIDを変換します",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "入力ファイルの形式。CloudConvertが自動的に検出できるように「自動検出」のままにしてください",
|
||||
"The target format to convert to": "変換先のフォーマット",
|
||||
"Choose a filename (including extension) for the output file": "出力ファイルのファイル名(拡張子を含む)を選択してください",
|
||||
"Use a specific engine for the conversion": "変換に特定のエンジンを使用する",
|
||||
"Use a specific engine version for the conversion": "変換に特定のエンジンバージョンを使用する",
|
||||
"Timeout in seconds after which the task will be cancelled": "タスクがキャンセルされるまで数秒後にタイムアウトします",
|
||||
"Wait for the conversion to complete before returning": "戻る前に変換が完了するまでお待ちください",
|
||||
"Download and store the converted file in Activepieces": "変換したファイルをActivepiecesにダウンロードして保存します",
|
||||
"The URL of the website to capture": "キャプチャするウェブサイトのURL",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "ページの範囲(例:1-3)またはカンマ区切りリスト(例:1,2,3)",
|
||||
"Zoom level to display the website. Defaults to 1": "ウェブサイトを表示するズームレベル。デフォルトは1です。",
|
||||
"Page width in cm": "ページ幅(cm単位)",
|
||||
"Page height in cm": "ページの高さ (cm)",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "PDFを印刷する際の用紙書式の種類。page_width と page_height を上書きします。",
|
||||
"Page orientation for PDF output": "PDF出力のページ方向",
|
||||
"Page top margin in mm": "Page top margin in mm",
|
||||
"Page bottom margin in mm": "ページ下マージン(mm)",
|
||||
"Page left margin in mm": "ページ左マージンを mm で表示",
|
||||
"Page right margin in mm": "ページ右マージン(mm)",
|
||||
"Render the background of websites": "ウェブサイトの背景をレンダリングする",
|
||||
"Create a header and a footer with the URL and page numbers": "URLとページ番号でヘッダーとフッターを作成します",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "日付、タイトル、URL、ページ番号、totalPages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "印刷フッターのHTMLテンプレート(クラス:日付、タイトル、URL、ページ番号、totalPages)",
|
||||
"When to consider navigation finished": "ナビゲーション終了を検討する時",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "要素が待ち受けるCSSセレクター (例: \"body\" or \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "ページの読み込み後に待機する追加時間",
|
||||
"Changes the CSS media type of the page": "ページの CSS メディアタイプを変更します",
|
||||
"Timeout in seconds after the task will be cancelled": "タスクがキャンセルされた数秒後にタイムアウトします",
|
||||
"Wait for the capture to complete before returning": "戻る前にキャプチャが完了するまでお待ちください",
|
||||
"Download and store the captured file in Activepieces": "取得したファイルをActivepiecesにダウンロードして保存します",
|
||||
"How to import the files for merging": "マージのためのファイルをインポートする方法",
|
||||
"List of files to merge into a single PDF": "単一のPDFにマージするファイルのリスト",
|
||||
"Wait for the merge to complete before returning": "戻る前にマージが完了するのを待つ",
|
||||
"Download and store the merged PDF in Activepieces": "統合されたPDFをActivepiecesにダウンロードして保存します",
|
||||
"ID of the CloudConvert task to retrieve": "取得するCloudConvertタスクのID",
|
||||
"Additional data to include in the response": "返信に含める追加データ",
|
||||
"Download and store the output files in Activepieces": "Activepiecesに出力ファイルをダウンロードして保存します",
|
||||
"How to import the files for archiving": "アーカイブするファイルをインポートする方法",
|
||||
"List of files to include in the archive": "アーカイブに含めるファイルのリスト",
|
||||
"The archive format to create": "作成するアーカイブ形式",
|
||||
"Choose a filename (including extension) for the archive file": "アーカイブファイルのファイル名(拡張子を含む)を選択してください",
|
||||
"Use a specific engine for the archiving": "アーカイブに特定のエンジンを使用する",
|
||||
"Use a specific engine version for the archiving": "アーカイブに特定のエンジンバージョンを使用する",
|
||||
"Wait for the archive creation to complete before returning": "アーカイブの作成が完了するまで戻ります。",
|
||||
"Download and store the created archive in Activepieces": "Activepiecesに作成したアーカイブをダウンロードして保存します",
|
||||
"How to import the file for optimization": "最適化のためにファイルをインポートする方法",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "アップロードして最適化するファイル (PDF、PNG、JPG)",
|
||||
"URL of the file to optimize": "最適化するファイルの URL",
|
||||
"ID of a previously stored file in Activepieces to optimize": "Activepiecesに保存されているファイルのIDを最適化する",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "ファイルの現在の形式です。設定されていない場合は、入力ファイルの拡張子が使用されます",
|
||||
"Optimization profile for specific target needs": "特定のターゲットニーズの最適化プロファイル",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "可視化された署名をフラット化し、編集不可能なグラフィックスとして保持します",
|
||||
"Color space of raster images": "ラスター画像の色空間",
|
||||
"Use a specific engine for the optimization": "最適化に特定のエンジンを使用する",
|
||||
"Use a specific engine version for the optimization": "最適化に特定のエンジンバージョンを使用する",
|
||||
"Wait for the optimization to complete before returning": "戻る前に最適化が完了するのを待つ",
|
||||
"Download and store the optimized file in Activepieces": "Activepiecesに最適化されたファイルをダウンロードして保存します",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"File Upload": "ファイルアップロード",
|
||||
"Auto-detect": "自動検出",
|
||||
"PDF": "PDF",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOCキー",
|
||||
"TXT": "XT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "その他",
|
||||
"Letter": "手紙",
|
||||
"Legal": "Legal",
|
||||
"Tabloid": "タブロイド",
|
||||
"Ledger": "Ledger",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "縦向き",
|
||||
"Landscape": "ランドスケープ",
|
||||
"Load Event": "イベントを読み込む",
|
||||
"DOMContentLoaded": "DOMContentLoaded",
|
||||
"Network Idle (0 connections)": "ネットワークアイドル(接続0)",
|
||||
"Network Idle (2 connections)": "ネットワークアイドル(2つの接続)",
|
||||
"Print": "印刷",
|
||||
"Screen": "画面",
|
||||
"Chrome (Default)": "Chrome (デフォルト)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3つの高さ(デフォルト)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "ZIP",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "STAR",
|
||||
"TAR.GZ": "TAR.GZ",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "7-Zip",
|
||||
"Archive Tool (Default)": "アーカイブツール (デフォルト)",
|
||||
"Web - Remove redundant data for the web": "Web - Web の冗長なデータを削除します",
|
||||
"Print - Optimized for printing": "Print - 印刷用に最適化",
|
||||
"Archive - Optimized for archiving purposes": "アーカイブ - アーカイブのために最適化",
|
||||
"MRC - Optimized for scanned images": "MRC - スキャン画像に最適化",
|
||||
"Max - Maximal size reduction": "最大サイズ",
|
||||
"Unchanged": "変更なし",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3つの高さ",
|
||||
"PDF Tools": "PDF ツール",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Job Event": "新しい作業イベント",
|
||||
"Job Finished": "作業完了",
|
||||
"Job Failed": "作業に失敗しました",
|
||||
"Triggers when a new job has been created": "新しいジョブが作成されたときにトリガーします",
|
||||
"Triggers when a CloudConvert job has been completed": "CloudConvertジョブが完了したときにトリガーします",
|
||||
"Triggers when a CloudConvert job has failed": "CloudConvertジョブが失敗したときにトリガーします"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "Bestandsconversie en verwerkingsplatform die 200+ formaten ondersteunen",
|
||||
"Region": "Regio",
|
||||
"CloudConvert processing region": "CloudConvert processing region",
|
||||
"Auto (Nearest)": "Automatisch (naast)",
|
||||
"EU Central (Germany)": "Centraal Europees (Duitsland)",
|
||||
"US East (Virginia)": "VS Oost (Virginia)",
|
||||
"Connect your CloudConvert account using OAuth2": "Verbind uw CloudConvert account met OAuth2",
|
||||
"Convert File": "Bestand converteren",
|
||||
"Capture Website": "Website vastleggen",
|
||||
"Merge Files to PDF": "Bestanden samenvoegen naar PDF",
|
||||
"Download a File": "Download een bestand",
|
||||
"Archive File": "Archief Bestand",
|
||||
"Optimize File": "Bestand optimaliseren",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Maak een basis bestandsconversietaak voor een enkel bestand met de gewenste outputindeling",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Leg webpagina vast als PDF, schermafbeelding PNG, of JPG vanuit een URL",
|
||||
"Combine multiple documents/images into a single PDF": "Meerdere documenten/afbeeldingen combineren tot een enkele PDF",
|
||||
"Downloads output from a completed task": "Downloads uitvoer van een voltooide taak",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Maakt een ZIP, RAR, 7Z, TAR, TAR.GZ of TAR.BZ2 archief aan",
|
||||
"Creates a task to optimize and compress a file": "Maakt een taak aan om te optimaliseren en te comprimeren van een bestand",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Import Method": "Import methode",
|
||||
"File": "Bestand",
|
||||
"File URL": "Bestand URL",
|
||||
"Stored File ID": "Opgeslagen bestand ID",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Uitvoer formaat",
|
||||
"Output Filename": "Uitvoer bestandsnaam",
|
||||
"Engine": "Motor",
|
||||
"Engine Version": "Engine versie",
|
||||
"Timeout (seconds)": "Time-out (seconden)",
|
||||
"Wait for Completion": "Wachten op voltooiing",
|
||||
"Store File": "Sla bestand op",
|
||||
"Website URL": "Website URL",
|
||||
"Pages": "Pagina's",
|
||||
"Zoom Level": "Zoom niveau",
|
||||
"Page Width (cm)": "Pagina breedte (cm)",
|
||||
"Page Height (cm)": "Pagina hoogte (cm)",
|
||||
"Page Format": "Pagina formaat",
|
||||
"Page Orientation": "Pagina oriëntatie",
|
||||
"Top Margin (mm)": "Hoogste marge (mm)",
|
||||
"Bottom Margin (mm)": "Onderste marge (mm)",
|
||||
"Left Margin (mm)": "Linker marge (mm)",
|
||||
"Right Margin (mm)": "Rechter marge (mm)",
|
||||
"Print Background": "Achtergrond afdrukken",
|
||||
"Display Header/Footer": "Kop- en voettekst weergeven",
|
||||
"Header Template": "Koptekst sjabloon",
|
||||
"Footer Template": "Voettekst sjabloon",
|
||||
"Wait Until": "Wacht tot",
|
||||
"Wait for Element": "Wachten op element",
|
||||
"Wait Time (ms)": "Wachttijd (ms)",
|
||||
"CSS Media Type": "CSS mediatype",
|
||||
"Files to Merge": "Bestanden om samen te voegen",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Aanvullende gegevens toevoegen",
|
||||
"Files to Archive": "Bestanden om te archiveren",
|
||||
"Archive Format": "Archief formaat",
|
||||
"Archive Filename": "Bestandsnaam archiveren",
|
||||
"Optimization Profile": "Optimalisatie Profiel",
|
||||
"Flatten Signatures": "Signatures samenvoegen",
|
||||
"Color Space": "Kleur ruimte",
|
||||
"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)",
|
||||
"How to import the file for conversion": "Hoe het bestand te importeren voor conversie",
|
||||
"File to upload and convert (select from your device)": "Bestand om te uploaden en converteren (selecteer op uw apparaat)",
|
||||
"URL of the file to convert": "URL van het te converteren bestand",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID van een eerder opgeslagen bestand in Activepieces om te converteren",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "Het formaat van het invoerbestand. Laat CloudConvert detecteren als \"Auto-detecteer\" automatisch",
|
||||
"The target format to convert to": "Het doelformaat om naar te converteren",
|
||||
"Choose a filename (including extension) for the output file": "Kies een bestandsnaam (inclusief extensie) voor het uitvoerbestand",
|
||||
"Use a specific engine for the conversion": "Gebruik een specifieke motor voor de conversie",
|
||||
"Use a specific engine version for the conversion": "Gebruik een specifieke motorversie voor de conversie",
|
||||
"Timeout in seconds after which the task will be cancelled": "Time-out in seconden waarna de taak wordt geannuleerd",
|
||||
"Wait for the conversion to complete before returning": "Wacht tot de conversie voltooid is voor u terugkeert",
|
||||
"Download and store the converted file in Activepieces": "Download en sla het geconverteerde bestand op in Activepieces",
|
||||
"The URL of the website to capture": "De URL van de website om op te nemen",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Paginabereik (bijv. 1-3) of komma gescheiden lijst (bijv. 1,2,3) van pagina's",
|
||||
"Zoom level to display the website. Defaults to 1": "Zoom niveau om de website weer te geven. Standaard ingesteld op 1",
|
||||
"Page width in cm": "Pagina breedte in cm",
|
||||
"Page height in cm": "Pagina hoogte in cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Papieren formaat type bij het afdrukken van een PDF. Overschrijft page_width en page_height",
|
||||
"Page orientation for PDF output": "Pagina oriëntatie voor PDF-uitvoer",
|
||||
"Page top margin in mm": "Bovenste marge van pagina in mm",
|
||||
"Page bottom margin in mm": "Pagina-onderste marge in mm",
|
||||
"Page left margin in mm": "Pagina linkermarge in mm",
|
||||
"Page right margin in mm": "Pagina rechtermarge in mm",
|
||||
"Render the background of websites": "Hertoon de achtergrond van websites",
|
||||
"Create a header and a footer with the URL and page numbers": "Maak een koptekst en een voettekst met URL en paginanummers",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "HTML template voor de print header met lessen: datum, titel, url, pageNumber, totalPages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "HTML template voor de opdruk voettekst met lessen: datum, titel, url, pageNumber, totalPages",
|
||||
"When to consider navigation finished": "Wanneer te overwegen navigatie voltooid",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "CSS-selector waarop het element moet wachten (bijv. \"body\" of \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "Extra tijd in ms om te wachten na laden van de pagina",
|
||||
"Changes the CSS media type of the page": "Wijzigt het CSS-mediatype van de pagina",
|
||||
"Timeout in seconds after the task will be cancelled": "Time-out in seconden nadat de taak wordt geannuleerd",
|
||||
"Wait for the capture to complete before returning": "Wacht tot de opname voltooid is voordat u terugkeert",
|
||||
"Download and store the captured file in Activepieces": "Download en sla het opgenomen bestand op in Activepieces",
|
||||
"How to import the files for merging": "Hoe de bestanden te importeren voor samenvoegen",
|
||||
"List of files to merge into a single PDF": "Lijst van bestanden om samen te voegen in een enkele PDF",
|
||||
"Wait for the merge to complete before returning": "Wacht tot de samenvoeging voltooid is voordat u terugkeert",
|
||||
"Download and store the merged PDF in Activepieces": "Download en sla de samengevoegde PDF op in Activepieces",
|
||||
"ID of the CloudConvert task to retrieve": "ID van de CloudConvert taak op te halen",
|
||||
"Additional data to include in the response": "Aanvullende gegevens om op te nemen in de reactie",
|
||||
"Download and store the output files in Activepieces": "Download en sla de uitvoerbestanden op in Activepieces",
|
||||
"How to import the files for archiving": "Hoe de bestanden te importeren voor archivering",
|
||||
"List of files to include in the archive": "Lijst van bestanden om op te nemen in het archief",
|
||||
"The archive format to create": "Het archiefformaat om aan te maken",
|
||||
"Choose a filename (including extension) for the archive file": "Kies een bestandsnaam (inclusief extensie) voor het archiefbestand",
|
||||
"Use a specific engine for the archiving": "Gebruik een specifieke engine voor de archivering",
|
||||
"Use a specific engine version for the archiving": "Gebruik een specifieke engine versie voor de archivering",
|
||||
"Wait for the archive creation to complete before returning": "Wacht tot de archiefcreatie voltooid is voordat u terugkeert",
|
||||
"Download and store the created archive in Activepieces": "Download en sla het gemaakte archief op in Activepieces",
|
||||
"How to import the file for optimization": "Hoe het bestand voor optimalisatie te importeren",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "Bestand om te uploaden en optimaliseren (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL van het bestand om te optimaliseren",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID van een eerder opgeslagen bestand in Activepieces om te optimaliseren",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "De huidige indeling van het bestand. Indien niet ingesteld, wordt de extensie van het invoerbestand gebruikt",
|
||||
"Optimization profile for specific target needs": "Optimalisatie profiel voor specifieke doelbehoeften",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Zichtbare handtekeningen afvlakken en ze als niet-bewerkbare afbeeldingen behouden",
|
||||
"Color space of raster images": "Kleurruimte van rasterafbeeldingen",
|
||||
"Use a specific engine for the optimization": "Gebruik een specifieke motor voor de optimalisatie",
|
||||
"Use a specific engine version for the optimization": "Gebruik een specifieke motorversie voor de optimalisatie",
|
||||
"Wait for the optimization to complete before returning": "Wacht tot de optimalisatie voltooid is voordat u terugkeert",
|
||||
"Download and store the optimized file in Activepieces": "Download en sla het geoptimaliseerde bestand op in Activepieces",
|
||||
"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..",
|
||||
"File Upload": "Bestand uploaden",
|
||||
"Auto-detect": "Auto-detecteren",
|
||||
"PDF": "PDF-bestand",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOC",
|
||||
"TXT": "TXT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "anders",
|
||||
"Letter": "Brief",
|
||||
"Legal": "Juridisch",
|
||||
"Tabloid": "Tabloïd",
|
||||
"Ledger": "Grootboek",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "Staand",
|
||||
"Landscape": "Liggend",
|
||||
"Load Event": "Gebeurtenis laden",
|
||||
"DOMContentLoaded": "DOMContentGeladen",
|
||||
"Network Idle (0 connections)": "Netwerk Idle (0 verbindingen)",
|
||||
"Network Idle (2 connections)": "Netwerk Idle (2 verbindingen)",
|
||||
"Print": "Afdrukken",
|
||||
"Screen": "Scherm",
|
||||
"Chrome (Default)": "Chrome (standaard)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3-Hoogten (standaard)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "Postcode",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "BTW",
|
||||
"TAR.GZ": "GZ",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "7-Postcode",
|
||||
"Archive Tool (Default)": "Archief Gereedschap (Standaard)",
|
||||
"Web - Remove redundant data for the web": "Web - Verwijder overbodige gegevens voor het web",
|
||||
"Print - Optimized for printing": "Print - Geoptimaliseerd voor afdrukken",
|
||||
"Archive - Optimized for archiving purposes": "Archief - Geoptimaliseerd voor archiveringsdoeleinden",
|
||||
"MRC - Optimized for scanned images": "MRC - Geoptimaliseerd voor gescande afbeeldingen",
|
||||
"Max - Maximal size reduction": "Max - Maximale reductie van grootte",
|
||||
"Unchanged": "Ongewijzigd",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3-Hoogten",
|
||||
"PDF Tools": "PDF Hulpmiddelen",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Job Event": "Nieuw Job Evenement",
|
||||
"Job Finished": "Taak voltooid",
|
||||
"Job Failed": "Taak mislukt",
|
||||
"Triggers when a new job has been created": "Triggert wanneer een nieuwe job is aangemaakt",
|
||||
"Triggers when a CloudConvert job has been completed": "Triggert wanneer een CloudConvert taak is voltooid",
|
||||
"Triggers when a CloudConvert job has failed": "Triggert wanneer een CloudConvert taak mislukt is"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "Plataforma de conversão e processamento que suporta mais de 200 formatos",
|
||||
"Region": "Região",
|
||||
"CloudConvert processing region": "CloudConverter região de processamento",
|
||||
"Auto (Nearest)": "Automático (próximo)",
|
||||
"EU Central (Germany)": "Central da UE (Alemanha)",
|
||||
"US East (Virginia)": "Leste dos EUA (Virgínia)",
|
||||
"Connect your CloudConvert account using OAuth2": "Conecte sua conta do CloudConverter usando OAuth2",
|
||||
"Convert File": "Converter Arquivo",
|
||||
"Capture Website": "Capturar o site",
|
||||
"Merge Files to PDF": "Mesclar Arquivos com PDF",
|
||||
"Download a File": "Baixar um arquivo",
|
||||
"Archive File": "Arquivo de Arquivo",
|
||||
"Optimize File": "Otimizar Arquivo",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Crie uma tarefa básica de conversão de arquivo para um único arquivo com formato de saída desejado",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Capture a página web como PDF, screenshot PNG, ou JPG a partir de um URL",
|
||||
"Combine multiple documents/images into a single PDF": "Combinar vários documentos/imagens em um único PDF",
|
||||
"Downloads output from a completed task": "Downloads saídos de uma tarefa concluída",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Cria um arquivo ZIP, RAR, 7Z, TAR, TAR.GZ ou TAR.BZ2",
|
||||
"Creates a task to optimize and compress a file": "Cria uma tarefa para otimizar e compactar um arquivo",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Import Method": "Método de importação",
|
||||
"File": "Arquivo",
|
||||
"File URL": "URL do Arquivo",
|
||||
"Stored File ID": "ID do arquivo armazenado",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Formato de saída",
|
||||
"Output Filename": "Nome do arquivo de saída",
|
||||
"Engine": "Mecanismo",
|
||||
"Engine Version": "Versão do motor",
|
||||
"Timeout (seconds)": "Tempo limite (segundos)",
|
||||
"Wait for Completion": "Aguardar conclusão",
|
||||
"Store File": "Armazenar arquivo",
|
||||
"Website URL": "URL do site",
|
||||
"Pages": "páginas",
|
||||
"Zoom Level": "Nível de zoom",
|
||||
"Page Width (cm)": "Largura da Página (cm)",
|
||||
"Page Height (cm)": "Altura da Página (cm)",
|
||||
"Page Format": "Formato da página",
|
||||
"Page Orientation": "Orientação da página",
|
||||
"Top Margin (mm)": "Margem Superior (mm)",
|
||||
"Bottom Margin (mm)": "Margem Inferior (mm)",
|
||||
"Left Margin (mm)": "Margem Esquerda (mm)",
|
||||
"Right Margin (mm)": "Margem Direita (mm)",
|
||||
"Print Background": "Fundo de Impressão",
|
||||
"Display Header/Footer": "Mostrar Cabeçalho/Rodapé",
|
||||
"Header Template": "Modelo de cabeçalho",
|
||||
"Footer Template": "Modelo de Rodapé",
|
||||
"Wait Until": "Aguardar até",
|
||||
"Wait for Element": "Aguarde o Elemento",
|
||||
"Wait Time (ms)": "Tempo de Espera (ms)",
|
||||
"CSS Media Type": "Tipo de mídia CSS",
|
||||
"Files to Merge": "Arquivos para mesclar",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Incluir dados adicionais",
|
||||
"Files to Archive": "Arquivos a arquivar",
|
||||
"Archive Format": "Formato do Arquivo",
|
||||
"Archive Filename": "Nome do Arquivo",
|
||||
"Optimization Profile": "Perfil de Otimização",
|
||||
"Flatten Signatures": "Nivelar assinaturas",
|
||||
"Color Space": "Espaço de Cor",
|
||||
"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)",
|
||||
"How to import the file for conversion": "Como importar o arquivo para conversão",
|
||||
"File to upload and convert (select from your device)": "Arquivo para enviar e converter (selecione do seu dispositivo)",
|
||||
"URL of the file to convert": "URL do arquivo para converter",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID de um arquivo armazenado anteriormente em peças ativas para converter",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "O formato do arquivo de entrada. Deixe como \"Auto-detectar\" para deixar o CloudConvert detectar automaticamente",
|
||||
"The target format to convert to": "O formato de destino para converter",
|
||||
"Choose a filename (including extension) for the output file": "Escolha um nome de arquivo (incluindo a extensão) para o arquivo de saída.",
|
||||
"Use a specific engine for the conversion": "Use um mecanismo específico para a conversão",
|
||||
"Use a specific engine version for the conversion": "Use uma versão específica do motor para a conversão",
|
||||
"Timeout in seconds after which the task will be cancelled": "Tempo limite em segundos após o qual a tarefa será cancelada",
|
||||
"Wait for the conversion to complete before returning": "Esperar a conversão ser concluída antes de retornar",
|
||||
"Download and store the converted file in Activepieces": "Baixar e armazenar o arquivo convertido em peças ativas",
|
||||
"The URL of the website to capture": "A URL do site a ser capturado",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Intervalo de páginas (por exemplo, 1-3) ou lista separada por vírgulas (por exemplo, 1,2,3) das páginas",
|
||||
"Zoom level to display the website. Defaults to 1": "Nível de zoom para exibir o site. O padrão é 1",
|
||||
"Page width in cm": "Largura da página em cm",
|
||||
"Page height in cm": "Altura da página em cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Tipo de formato de papel ao imprimir um PDF. Substitui page_width e page_height",
|
||||
"Page orientation for PDF output": "Orientação da página para saída PDF",
|
||||
"Page top margin in mm": "Margem superior da página em mm",
|
||||
"Page bottom margin in mm": "Margem inferior da página em mm",
|
||||
"Page left margin in mm": "Página esquerda margem em mm",
|
||||
"Page right margin in mm": "Página de margem direita em mm",
|
||||
"Render the background of websites": "Renderizar o fundo dos sites",
|
||||
"Create a header and a footer with the URL and page numbers": "Crie um cabeçalho e um rodapé com a URL e os números de página",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "Modelo HTML para o cabeçalho de impressão com classes: data, título, url, pageNumber, páginas totais",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "Modelo HTML para o rodapé de impressão com classes: data, título, url, pageNumber, páginas totais",
|
||||
"When to consider navigation finished": "Quando considerar a navegação concluída",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "Seletor CSS para o elemento esperar (por exemplo, \"corpo\" ou \"#elemento\")",
|
||||
"Additional time in ms to wait after the page load": "Tempo adicional em ms para esperar após a carga da página",
|
||||
"Changes the CSS media type of the page": "Altera o tipo de mídia CSS da página",
|
||||
"Timeout in seconds after the task will be cancelled": "Tempo limite em segundos após a tarefa ser cancelada",
|
||||
"Wait for the capture to complete before returning": "Aguarde a conclusão da captura antes de retornar",
|
||||
"Download and store the captured file in Activepieces": "Baixar e armazenar o arquivo capturado em peças ativas",
|
||||
"How to import the files for merging": "Como importar os arquivos para mesclar",
|
||||
"List of files to merge into a single PDF": "Lista de arquivos para mesclar em um único PDF",
|
||||
"Wait for the merge to complete before returning": "Espere que a mesclagem seja concluída antes de retornar",
|
||||
"Download and store the merged PDF in Activepieces": "Baixar e armazenar os PDF mesclados em partes ativas",
|
||||
"ID of the CloudConvert task to retrieve": "ID da tarefa CloudConverter para recuperar",
|
||||
"Additional data to include in the response": "Dados adicionais para incluir na resposta",
|
||||
"Download and store the output files in Activepieces": "Baixar e armazenar os arquivos de saída em peças ativas",
|
||||
"How to import the files for archiving": "Como importar os arquivos para arquivamento",
|
||||
"List of files to include in the archive": "Lista de arquivos a serem incluídos no arquivo",
|
||||
"The archive format to create": "O formato de arquivo para criar",
|
||||
"Choose a filename (including extension) for the archive file": "Escolha um nome de arquivo (incluindo a extensão) para o arquivo",
|
||||
"Use a specific engine for the archiving": "Use um mecanismo específico para arquivamento",
|
||||
"Use a specific engine version for the archiving": "Use uma versão específica do motor para o arquivamento",
|
||||
"Wait for the archive creation to complete before returning": "Aguarde a conclusão da criação do arquivo antes de retornar",
|
||||
"Download and store the created archive in Activepieces": "Baixar e armazenar o arquivo criado em partes ativas",
|
||||
"How to import the file for optimization": "Como importar o arquivo para otimização",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "Arquivo para upload e otimização (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL do arquivo para otimizar",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID de um arquivo armazenado anteriormente em peças ativas para otimizar",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "O formato atual do arquivo. Se não for definido, a extensão do arquivo de entrada é usada",
|
||||
"Optimization profile for specific target needs": "Perfil de otimização para necessidades específicas de alvo",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Achate assinaturas visíveis e mantenha-as como gráficos não editáveis",
|
||||
"Color space of raster images": "Espaço de cor das imagens raster",
|
||||
"Use a specific engine for the optimization": "Usar um mecanismo específico para otimização",
|
||||
"Use a specific engine version for the optimization": "Usar uma versão específica de mecanismo para otimização",
|
||||
"Wait for the optimization to complete before returning": "Aguarde a otimização ser concluída antes de retornar",
|
||||
"Download and store the optimized file in Activepieces": "Baixar e armazenar o arquivo otimizado em peças ativas",
|
||||
"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..",
|
||||
"File Upload": "Envio de arquivo",
|
||||
"Auto-detect": "Auto-detectar",
|
||||
"PDF": "Pdf",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "Doc",
|
||||
"TXT": "Txt",
|
||||
"JPG": "Jpg",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "Outros",
|
||||
"Letter": "Letra",
|
||||
"Legal": "Informações",
|
||||
"Tabloid": "Tablóide",
|
||||
"Ledger": "Contabilidade",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "Retrato",
|
||||
"Landscape": "Paisagem",
|
||||
"Load Event": "Carregar Evento",
|
||||
"DOMContentLoaded": "DOMContentLoaded",
|
||||
"Network Idle (0 connections)": "Idle de rede (0 conexões)",
|
||||
"Network Idle (2 connections)": "Idle de rede (2 conexões)",
|
||||
"Print": "Impressão",
|
||||
"Screen": "Tela",
|
||||
"Chrome (Default)": "Chrome (Padrão)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3-Alturas (Padrão)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "Zip",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "TAR",
|
||||
"TAR.GZ": "GZ.T.R.A.",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "CEP 7",
|
||||
"Archive Tool (Default)": "Ferramenta de Arquivo (Padrão)",
|
||||
"Web - Remove redundant data for the web": "Web - Remover dados redundantes para a web",
|
||||
"Print - Optimized for printing": "Impressão - Otimizado para impressão",
|
||||
"Archive - Optimized for archiving purposes": "Arquivo - Otimizado para fins de arquivamento",
|
||||
"MRC - Optimized for scanned images": "MRC - Otimizado para imagens escaneadas",
|
||||
"Max - Maximal size reduction": "Máx - Redução de tamanho máximo",
|
||||
"Unchanged": "Inalterado",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3-Alturas",
|
||||
"PDF Tools": "Ferramentas PDF",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Job Event": "Novo Evento de Trabalho",
|
||||
"Job Finished": "Trabalho concluído",
|
||||
"Job Failed": "Tarefa Falhou",
|
||||
"Triggers when a new job has been created": "Dispara quando um novo trabalho foi criado",
|
||||
"Triggers when a CloudConvert job has been completed": "Dispara quando um trabalho do CloudConverter for concluído",
|
||||
"Triggers when a CloudConvert job has failed": "Dispara quando um trabalho do CloudConverter falhar"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "File conversion and processing platform supporting 200+ formats",
|
||||
"Region": "Region",
|
||||
"CloudConvert processing region": "CloudConvert processing region",
|
||||
"Auto (Nearest)": "Auto (Nearest)",
|
||||
"EU Central (Germany)": "EU Central (Germany)",
|
||||
"US East (Virginia)": "US East (Virginia)",
|
||||
"Connect your CloudConvert account using OAuth2": "Connect your CloudConvert account using OAuth2",
|
||||
"Convert File": "Convert File",
|
||||
"Capture Website": "Capture Website",
|
||||
"Merge Files to PDF": "Merge Files to PDF",
|
||||
"Download a File": "Download a File",
|
||||
"Archive File": "Archive File",
|
||||
"Optimize File": "Optimize File",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Create a basic file conversion task for a single file with desired output format",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Capture webpage as PDF, screenshot PNG, or JPG from a URL",
|
||||
"Combine multiple documents/images into a single PDF": "Combine multiple documents/images into a single PDF",
|
||||
"Downloads output from a completed task": "Downloads output from a completed task",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive",
|
||||
"Creates a task to optimize and compress a file": "Creates a task to optimize and compress a file",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Import Method": "Import Method",
|
||||
"File": "File",
|
||||
"File URL": "File URL",
|
||||
"Stored File ID": "Stored File ID",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Output Format",
|
||||
"Output Filename": "Output Filename",
|
||||
"Engine": "Engine",
|
||||
"Engine Version": "Engine Version",
|
||||
"Timeout (seconds)": "Timeout (seconds)",
|
||||
"Wait for Completion": "Wait for Completion",
|
||||
"Store File": "Store File",
|
||||
"Website URL": "Website URL",
|
||||
"Pages": "Pages",
|
||||
"Zoom Level": "Zoom Level",
|
||||
"Page Width (cm)": "Page Width (cm)",
|
||||
"Page Height (cm)": "Page Height (cm)",
|
||||
"Page Format": "Page Format",
|
||||
"Page Orientation": "Page Orientation",
|
||||
"Top Margin (mm)": "Top Margin (mm)",
|
||||
"Bottom Margin (mm)": "Bottom Margin (mm)",
|
||||
"Left Margin (mm)": "Left Margin (mm)",
|
||||
"Right Margin (mm)": "Right Margin (mm)",
|
||||
"Print Background": "Print Background",
|
||||
"Display Header/Footer": "Display Header/Footer",
|
||||
"Header Template": "Header Template",
|
||||
"Footer Template": "Footer Template",
|
||||
"Wait Until": "Wait Until",
|
||||
"Wait for Element": "Wait for Element",
|
||||
"Wait Time (ms)": "Wait Time (ms)",
|
||||
"CSS Media Type": "CSS Media Type",
|
||||
"Files to Merge": "Files to Merge",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Include Additional Data",
|
||||
"Files to Archive": "Files to Archive",
|
||||
"Archive Format": "Archive Format",
|
||||
"Archive Filename": "Archive Filename",
|
||||
"Optimization Profile": "Optimization Profile",
|
||||
"Flatten Signatures": "Flatten Signatures",
|
||||
"Color Space": "Color Space",
|
||||
"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)",
|
||||
"How to import the file for conversion": "How to import the file for conversion",
|
||||
"File to upload and convert (select from your device)": "File to upload and convert (select from your device)",
|
||||
"URL of the file to convert": "URL of the file to convert",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID of a previously stored file in Activepieces to convert",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically",
|
||||
"The target format to convert to": "The target format to convert to",
|
||||
"Choose a filename (including extension) for the output file": "Choose a filename (including extension) for the output file",
|
||||
"Use a specific engine for the conversion": "Use a specific engine for the conversion",
|
||||
"Use a specific engine version for the conversion": "Use a specific engine version for the conversion",
|
||||
"Timeout in seconds after which the task will be cancelled": "Timeout in seconds after which the task will be cancelled",
|
||||
"Wait for the conversion to complete before returning": "Wait for the conversion to complete before returning",
|
||||
"Download and store the converted file in Activepieces": "Download and store the converted file in Activepieces",
|
||||
"The URL of the website to capture": "The URL of the website to capture",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages",
|
||||
"Zoom level to display the website. Defaults to 1": "Zoom level to display the website. Defaults to 1",
|
||||
"Page width in cm": "Page width in cm",
|
||||
"Page height in cm": "Page height in cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Paper format type when printing a PDF. Overrides page_width and page_height",
|
||||
"Page orientation for PDF output": "Page orientation for PDF output",
|
||||
"Page top margin in mm": "Page top margin in mm",
|
||||
"Page bottom margin in mm": "Page bottom margin in mm",
|
||||
"Page left margin in mm": "Page left margin in mm",
|
||||
"Page right margin in mm": "Page right margin in mm",
|
||||
"Render the background of websites": "Render the background of websites",
|
||||
"Create a header and a footer with the URL and page numbers": "Create a header and a footer with the URL and page numbers",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "HTML template for the print header with classes: date, title, url, pageNumber, totalPages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "HTML template for the print footer with classes: date, title, url, pageNumber, totalPages",
|
||||
"When to consider navigation finished": "When to consider navigation finished",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "CSS selector for element to wait for (e.g. \"body\" or \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "Additional time in ms to wait after the page load",
|
||||
"Changes the CSS media type of the page": "Changes the CSS media type of the page",
|
||||
"Timeout in seconds after the task will be cancelled": "Timeout in seconds after the task will be cancelled",
|
||||
"Wait for the capture to complete before returning": "Wait for the capture to complete before returning",
|
||||
"Download and store the captured file in Activepieces": "Download and store the captured file in Activepieces",
|
||||
"How to import the files for merging": "How to import the files for merging",
|
||||
"List of files to merge into a single PDF": "List of files to merge into a single PDF",
|
||||
"Wait for the merge to complete before returning": "Wait for the merge to complete before returning",
|
||||
"Download and store the merged PDF in Activepieces": "Download and store the merged PDF in Activepieces",
|
||||
"ID of the CloudConvert task to retrieve": "ID of the CloudConvert task to retrieve",
|
||||
"Additional data to include in the response": "Additional data to include in the response",
|
||||
"Download and store the output files in Activepieces": "Download and store the output files in Activepieces",
|
||||
"How to import the files for archiving": "How to import the files for archiving",
|
||||
"List of files to include in the archive": "List of files to include in the archive",
|
||||
"The archive format to create": "The archive format to create",
|
||||
"Choose a filename (including extension) for the archive file": "Choose a filename (including extension) for the archive file",
|
||||
"Use a specific engine for the archiving": "Use a specific engine for the archiving",
|
||||
"Use a specific engine version for the archiving": "Use a specific engine version for the archiving",
|
||||
"Wait for the archive creation to complete before returning": "Wait for the archive creation to complete before returning",
|
||||
"Download and store the created archive in Activepieces": "Download and store the created archive in Activepieces",
|
||||
"How to import the file for optimization": "How to import the file for optimization",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "File to upload and optimize (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL of the file to optimize",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID of a previously stored file in Activepieces to optimize",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "The current format of the file. If not set, the extension of the input file is used",
|
||||
"Optimization profile for specific target needs": "Optimization profile for specific target needs",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Flatten visible signatures and keep them as non-editable graphics",
|
||||
"Color space of raster images": "Color space of raster images",
|
||||
"Use a specific engine for the optimization": "Use a specific engine for the optimization",
|
||||
"Use a specific engine version for the optimization": "Use a specific engine version for the optimization",
|
||||
"Wait for the optimization to complete before returning": "Wait for the optimization to complete before returning",
|
||||
"Download and store the optimized file in Activepieces": "Download and store the optimized file in Activepieces",
|
||||
"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..",
|
||||
"File Upload": "File Upload",
|
||||
"Auto-detect": "Auto-detect",
|
||||
"PDF": "PDF",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOC",
|
||||
"TXT": "TXT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "Other",
|
||||
"Letter": "Letter",
|
||||
"Legal": "Legal",
|
||||
"Tabloid": "Tabloid",
|
||||
"Ledger": "Ledger",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "Portrait",
|
||||
"Landscape": "Landscape",
|
||||
"Load Event": "Load Event",
|
||||
"DOMContentLoaded": "DOMContentLoaded",
|
||||
"Network Idle (0 connections)": "Network Idle (0 connections)",
|
||||
"Network Idle (2 connections)": "Network Idle (2 connections)",
|
||||
"Print": "Print",
|
||||
"Screen": "Screen",
|
||||
"Chrome (Default)": "Chrome (Default)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3-Heights (Default)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "ZIP",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "TAR",
|
||||
"TAR.GZ": "TAR.GZ",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "7-Zip",
|
||||
"Archive Tool (Default)": "Archive Tool (Default)",
|
||||
"Web - Remove redundant data for the web": "Web - Remove redundant data for the web",
|
||||
"Print - Optimized for printing": "Print - Optimized for printing",
|
||||
"Archive - Optimized for archiving purposes": "Archive - Optimized for archiving purposes",
|
||||
"MRC - Optimized for scanned images": "MRC - Optimized for scanned images",
|
||||
"Max - Maximal size reduction": "Max - Maximal size reduction",
|
||||
"Unchanged": "Unchanged",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3-Heights",
|
||||
"PDF Tools": "PDF Tools",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Job Event": "New Job Event",
|
||||
"Job Finished": "Job Finished",
|
||||
"Job Failed": "Job Failed",
|
||||
"Triggers when a new job has been created": "Triggers when a new job has been created",
|
||||
"Triggers when a CloudConvert job has been completed": "Triggers when a CloudConvert job has been completed",
|
||||
"Triggers when a CloudConvert job has failed": "Triggers when a CloudConvert job has failed"
|
||||
}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"File conversion and processing platform supporting 200+ formats": "File conversion and processing platform supporting 200+ formats",
|
||||
"Region": "Region",
|
||||
"CloudConvert processing region": "CloudConvert processing region",
|
||||
"Auto (Nearest)": "Auto (Nearest)",
|
||||
"EU Central (Germany)": "EU Central (Germany)",
|
||||
"US East (Virginia)": "US East (Virginia)",
|
||||
"Connect your CloudConvert account using OAuth2": "Connect your CloudConvert account using OAuth2",
|
||||
"Convert File": "Convert File",
|
||||
"Capture Website": "Capture Website",
|
||||
"Merge Files to PDF": "Merge Files to PDF",
|
||||
"Download a File": "Download a File",
|
||||
"Archive File": "Archive File",
|
||||
"Optimize File": "Optimize File",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Create a basic file conversion task for a single file with desired output format": "Create a basic file conversion task for a single file with desired output format",
|
||||
"Capture webpage as PDF, screenshot PNG, or JPG from a URL": "Capture webpage as PDF, screenshot PNG, or JPG from a URL",
|
||||
"Combine multiple documents/images into a single PDF": "Combine multiple documents/images into a single PDF",
|
||||
"Downloads output from a completed task": "Downloads output from a completed task",
|
||||
"Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive": "Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive",
|
||||
"Creates a task to optimize and compress a file": "Creates a task to optimize and compress a file",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Import Method": "Import Method",
|
||||
"File": "文件",
|
||||
"File URL": "File URL",
|
||||
"Stored File ID": "Stored File ID",
|
||||
"Input Format": "Input Format",
|
||||
"Output Format": "Output Format",
|
||||
"Output Filename": "Output Filename",
|
||||
"Engine": "Engine",
|
||||
"Engine Version": "Engine Version",
|
||||
"Timeout (seconds)": "Timeout (seconds)",
|
||||
"Wait for Completion": "Wait for Completion",
|
||||
"Store File": "Store File",
|
||||
"Website URL": "Website URL",
|
||||
"Pages": "Pages",
|
||||
"Zoom Level": "Zoom Level",
|
||||
"Page Width (cm)": "Page Width (cm)",
|
||||
"Page Height (cm)": "Page Height (cm)",
|
||||
"Page Format": "Page Format",
|
||||
"Page Orientation": "Page Orientation",
|
||||
"Top Margin (mm)": "Top Margin (mm)",
|
||||
"Bottom Margin (mm)": "Bottom Margin (mm)",
|
||||
"Left Margin (mm)": "Left Margin (mm)",
|
||||
"Right Margin (mm)": "Right Margin (mm)",
|
||||
"Print Background": "Print Background",
|
||||
"Display Header/Footer": "Display Header/Footer",
|
||||
"Header Template": "Header Template",
|
||||
"Footer Template": "Footer Template",
|
||||
"Wait Until": "Wait Until",
|
||||
"Wait for Element": "Wait for Element",
|
||||
"Wait Time (ms)": "Wait Time (ms)",
|
||||
"CSS Media Type": "CSS Media Type",
|
||||
"Files to Merge": "Files to Merge",
|
||||
"Task ID": "Task ID",
|
||||
"Include Additional Data": "Include Additional Data",
|
||||
"Files to Archive": "Files to Archive",
|
||||
"Archive Format": "Archive Format",
|
||||
"Archive Filename": "Archive Filename",
|
||||
"Optimization Profile": "Optimization Profile",
|
||||
"Flatten Signatures": "Flatten Signatures",
|
||||
"Color Space": "Color Space",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"How to import the file for conversion": "How to import the file for conversion",
|
||||
"File to upload and convert (select from your device)": "File to upload and convert (select from your device)",
|
||||
"URL of the file to convert": "URL of the file to convert",
|
||||
"ID of a previously stored file in Activepieces to convert": "ID of a previously stored file in Activepieces to convert",
|
||||
"The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically": "The format of the input file. Leave as \"Auto-detect\" to let CloudConvert detect automatically",
|
||||
"The target format to convert to": "The target format to convert to",
|
||||
"Choose a filename (including extension) for the output file": "Choose a filename (including extension) for the output file",
|
||||
"Use a specific engine for the conversion": "Use a specific engine for the conversion",
|
||||
"Use a specific engine version for the conversion": "Use a specific engine version for the conversion",
|
||||
"Timeout in seconds after which the task will be cancelled": "Timeout in seconds after which the task will be cancelled",
|
||||
"Wait for the conversion to complete before returning": "Wait for the conversion to complete before returning",
|
||||
"Download and store the converted file in Activepieces": "Download and store the converted file in Activepieces",
|
||||
"The URL of the website to capture": "The URL of the website to capture",
|
||||
"Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages": "Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages",
|
||||
"Zoom level to display the website. Defaults to 1": "Zoom level to display the website. Defaults to 1",
|
||||
"Page width in cm": "Page width in cm",
|
||||
"Page height in cm": "Page height in cm",
|
||||
"Paper format type when printing a PDF. Overrides page_width and page_height": "Paper format type when printing a PDF. Overrides page_width and page_height",
|
||||
"Page orientation for PDF output": "Page orientation for PDF output",
|
||||
"Page top margin in mm": "Page top margin in mm",
|
||||
"Page bottom margin in mm": "Page bottom margin in mm",
|
||||
"Page left margin in mm": "Page left margin in mm",
|
||||
"Page right margin in mm": "Page right margin in mm",
|
||||
"Render the background of websites": "Render the background of websites",
|
||||
"Create a header and a footer with the URL and page numbers": "Create a header and a footer with the URL and page numbers",
|
||||
"HTML template for the print header with classes: date, title, url, pageNumber, totalPages": "HTML template for the print header with classes: date, title, url, pageNumber, totalPages",
|
||||
"HTML template for the print footer with classes: date, title, url, pageNumber, totalPages": "HTML template for the print footer with classes: date, title, url, pageNumber, totalPages",
|
||||
"When to consider navigation finished": "When to consider navigation finished",
|
||||
"CSS selector for element to wait for (e.g. \"body\" or \"#element\")": "CSS selector for element to wait for (e.g. \"body\" or \"#element\")",
|
||||
"Additional time in ms to wait after the page load": "Additional time in ms to wait after the page load",
|
||||
"Changes the CSS media type of the page": "Changes the CSS media type of the page",
|
||||
"Timeout in seconds after the task will be cancelled": "Timeout in seconds after the task will be cancelled",
|
||||
"Wait for the capture to complete before returning": "Wait for the capture to complete before returning",
|
||||
"Download and store the captured file in Activepieces": "Download and store the captured file in Activepieces",
|
||||
"How to import the files for merging": "How to import the files for merging",
|
||||
"List of files to merge into a single PDF": "List of files to merge into a single PDF",
|
||||
"Wait for the merge to complete before returning": "Wait for the merge to complete before returning",
|
||||
"Download and store the merged PDF in Activepieces": "Download and store the merged PDF in Activepieces",
|
||||
"ID of the CloudConvert task to retrieve": "ID of the CloudConvert task to retrieve",
|
||||
"Additional data to include in the response": "Additional data to include in the response",
|
||||
"Download and store the output files in Activepieces": "Download and store the output files in Activepieces",
|
||||
"How to import the files for archiving": "How to import the files for archiving",
|
||||
"List of files to include in the archive": "List of files to include in the archive",
|
||||
"The archive format to create": "The archive format to create",
|
||||
"Choose a filename (including extension) for the archive file": "Choose a filename (including extension) for the archive file",
|
||||
"Use a specific engine for the archiving": "Use a specific engine for the archiving",
|
||||
"Use a specific engine version for the archiving": "Use a specific engine version for the archiving",
|
||||
"Wait for the archive creation to complete before returning": "Wait for the archive creation to complete before returning",
|
||||
"Download and store the created archive in Activepieces": "Download and store the created archive in Activepieces",
|
||||
"How to import the file for optimization": "How to import the file for optimization",
|
||||
"File to upload and optimize (PDF, PNG, JPG)": "File to upload and optimize (PDF, PNG, JPG)",
|
||||
"URL of the file to optimize": "URL of the file to optimize",
|
||||
"ID of a previously stored file in Activepieces to optimize": "ID of a previously stored file in Activepieces to optimize",
|
||||
"The current format of the file. If not set, the extension of the input file is used": "The current format of the file. If not set, the extension of the input file is used",
|
||||
"Optimization profile for specific target needs": "Optimization profile for specific target needs",
|
||||
"Flatten visible signatures and keep them as non-editable graphics": "Flatten visible signatures and keep them as non-editable graphics",
|
||||
"Color space of raster images": "Color space of raster images",
|
||||
"Use a specific engine for the optimization": "Use a specific engine for the optimization",
|
||||
"Use a specific engine version for the optimization": "Use a specific engine version for the optimization",
|
||||
"Wait for the optimization to complete before returning": "Wait for the optimization to complete before returning",
|
||||
"Download and store the optimized file in Activepieces": "Download and store the optimized file in Activepieces",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"File Upload": "File Upload",
|
||||
"Auto-detect": "Auto-detect",
|
||||
"PDF": "PDF",
|
||||
"DOCX": "DOCX",
|
||||
"DOC": "DOC",
|
||||
"TXT": "TXT",
|
||||
"JPG": "JPG",
|
||||
"PNG": "PNG",
|
||||
"HTML": "HTML",
|
||||
"Other": "Other",
|
||||
"Letter": "Letter",
|
||||
"Legal": "Legal",
|
||||
"Tabloid": "Tabloid",
|
||||
"Ledger": "Ledger",
|
||||
"A0": "A0",
|
||||
"A1": "A1",
|
||||
"A2": "A2",
|
||||
"A3": "A3",
|
||||
"A4": "A4",
|
||||
"A5": "A5",
|
||||
"A6": "A6",
|
||||
"Portrait": "Portrait",
|
||||
"Landscape": "Landscape",
|
||||
"Load Event": "Load Event",
|
||||
"DOMContentLoaded": "DOMContentLoaded",
|
||||
"Network Idle (0 connections)": "Network Idle (0 connections)",
|
||||
"Network Idle (2 connections)": "Network Idle (2 connections)",
|
||||
"Print": "Print",
|
||||
"Screen": "Screen",
|
||||
"Chrome (Default)": "Chrome (Default)",
|
||||
"wkhtmltopdf": "wkhtmltopdf",
|
||||
"3-Heights (Default)": "3-Heights (Default)",
|
||||
"PDFTron": "PDFTron",
|
||||
"MuPDF": "MuPDF",
|
||||
"Poppler": "Poppler",
|
||||
"LibreOffice": "LibreOffice",
|
||||
"ZIP": "ZIP",
|
||||
"RAR": "RAR",
|
||||
"7Z": "7Z",
|
||||
"TAR": "TAR",
|
||||
"TAR.GZ": "TAR.GZ",
|
||||
"TAR.BZ2": "TAR.BZ2",
|
||||
"7-Zip": "7-Zip",
|
||||
"Archive Tool (Default)": "Archive Tool (Default)",
|
||||
"Web - Remove redundant data for the web": "Web - Remove redundant data for the web",
|
||||
"Print - Optimized for printing": "Print - Optimized for printing",
|
||||
"Archive - Optimized for archiving purposes": "Archive - Optimized for archiving purposes",
|
||||
"MRC - Optimized for scanned images": "MRC - Optimized for scanned images",
|
||||
"Max - Maximal size reduction": "Max - Maximal size reduction",
|
||||
"Unchanged": "Unchanged",
|
||||
"RGB": "RGB",
|
||||
"CMYK": "CMYK",
|
||||
"Grayscale": "Grayscale",
|
||||
"3-Heights": "3-Heights",
|
||||
"PDF Tools": "PDF Tools",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Job Event": "New Job Event",
|
||||
"Job Finished": "Job Finished",
|
||||
"Job Failed": "Job Failed",
|
||||
"Triggers when a new job has been created": "Triggers when a new job has been created",
|
||||
"Triggers when a CloudConvert job has been completed": "Triggers when a CloudConvert job has been completed",
|
||||
"Triggers when a CloudConvert job has failed": "Triggers when a CloudConvert job has failed"
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
import { createPiece } from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { cloudconvertAuth } from './lib/common/auth';
|
||||
import { newJob } from './lib/triggers/new-job';
|
||||
import { jobFinished } from './lib/triggers/job-finished';
|
||||
import { jobFailed } from './lib/triggers/job-failed';
|
||||
import { convertFile } from './lib/actions/convert-file';
|
||||
import { captureWebsite } from './lib/actions/capture-website';
|
||||
import { mergePdf } from './lib/actions/merge-pdf';
|
||||
import { downloadFile } from './lib/actions/download-file';
|
||||
import { archiveFile } from './lib/actions/archive-file';
|
||||
import { optimizeFile } from './lib/actions/optimize-file';
|
||||
|
||||
export const cloudconvert = createPiece({
|
||||
displayName: 'CloudConvert',
|
||||
description: 'File conversion and processing platform supporting 200+ formats',
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/cloudconvert.png',
|
||||
categories: [PieceCategory.DEVELOPER_TOOLS, PieceCategory.CONTENT_AND_FILES],
|
||||
authors: ['owuzo'],
|
||||
auth: cloudconvertAuth,
|
||||
actions: [
|
||||
convertFile,
|
||||
captureWebsite,
|
||||
mergePdf,
|
||||
downloadFile,
|
||||
archiveFile,
|
||||
optimizeFile,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: () => 'https://api.cloudconvert.com/v2',
|
||||
auth: cloudconvertAuth,
|
||||
authMapping: async (auth) => ({
|
||||
Authorization: `Bearer ${auth.access_token}`,
|
||||
}),
|
||||
}),
|
||||
],
|
||||
triggers: [newJob, jobFinished, jobFailed],
|
||||
});
|
||||
|
||||
@@ -0,0 +1,266 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation, httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudconvertAuth, CloudConvertClient, archiveFileSchema } from '../common';
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
|
||||
const archiveFileProps = () => ({
|
||||
import_method: Property.StaticDropdown({
|
||||
displayName: 'Import Method',
|
||||
description: 'How to import the files for archiving',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'File Upload', value: 'upload' },
|
||||
{ label: 'File URL', value: 'url' },
|
||||
{ label: 'Stored File ID', value: 'stored_file' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'upload'
|
||||
}),
|
||||
files: Property.Array({
|
||||
displayName: 'Files to Archive',
|
||||
description: 'List of files to include in the archive',
|
||||
required: true,
|
||||
properties: {
|
||||
url: Property.ShortText({
|
||||
displayName: 'File URL',
|
||||
description: 'URL of the file to archive',
|
||||
required: false,
|
||||
}),
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'File to upload and archive',
|
||||
required: false,
|
||||
}),
|
||||
stored_file_id: Property.ShortText({
|
||||
displayName: 'Stored File ID',
|
||||
description: 'ID of a previously stored file in Activepieces to archive',
|
||||
required: false,
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Filename in Archive',
|
||||
description: 'Optional filename for this file within the archive',
|
||||
required: false,
|
||||
})
|
||||
}
|
||||
}),
|
||||
output_format: Property.StaticDropdown({
|
||||
displayName: 'Archive Format',
|
||||
description: 'The archive format to create',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'ZIP', value: 'zip' },
|
||||
{ label: 'RAR', value: 'rar' },
|
||||
{ label: '7Z', value: '7z' },
|
||||
{ label: 'TAR', value: 'tar' },
|
||||
{ label: 'TAR.GZ', value: 'targz' },
|
||||
{ label: 'TAR.BZ2', value: 'tarbz2' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'zip'
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Archive Filename',
|
||||
description: 'Choose a filename (including extension) for the archive file',
|
||||
required: false,
|
||||
defaultValue: 'archive.zip'
|
||||
}),
|
||||
engine: Property.StaticDropdown({
|
||||
displayName: 'Engine',
|
||||
description: 'Use a specific engine for the archiving',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: '7-Zip', value: '7z' },
|
||||
{ label: 'Archive Tool (Default)', value: 'archivetool' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
engine_version: Property.ShortText({
|
||||
displayName: 'Engine Version',
|
||||
description: 'Use a specific engine version for the archiving',
|
||||
required: false,
|
||||
}),
|
||||
timeout: Property.Number({
|
||||
displayName: 'Timeout (seconds)',
|
||||
description: 'Timeout in seconds after which the task will be cancelled',
|
||||
required: false,
|
||||
}),
|
||||
wait_for_completion: Property.Checkbox({
|
||||
displayName: 'Wait for Completion',
|
||||
description: 'Wait for the archive creation to complete before returning',
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
}),
|
||||
store_file: Property.Checkbox({
|
||||
displayName: 'Store File',
|
||||
description: 'Download and store the created archive in Activepieces',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
});
|
||||
|
||||
export const archiveFile = createAction({
|
||||
name: 'archive_file',
|
||||
displayName: 'Archive File',
|
||||
description: 'Creates a ZIP, RAR, 7Z, TAR, TAR.GZ or TAR.BZ2 archive',
|
||||
auth: cloudconvertAuth,
|
||||
requireAuth: true,
|
||||
props: archiveFileProps(),
|
||||
async run(context) {
|
||||
await archiveFileSchema.parseAsync(context.propsValue);
|
||||
const { import_method, files, output_format, filename, engine, engine_version, timeout, wait_for_completion, store_file } = context.propsValue;
|
||||
|
||||
if (!files || files.length === 0) {
|
||||
throw new Error('At least one file is required to create an archive');
|
||||
}
|
||||
|
||||
const client = new CloudConvertClient(context.auth);
|
||||
|
||||
try {
|
||||
const jobTasks: Record<string, any> = {};
|
||||
|
||||
files.forEach((file: any, index: number) => {
|
||||
const taskName = `import-file-${index + 1}`;
|
||||
|
||||
if (import_method === 'url') {
|
||||
if (!file.url) {
|
||||
throw new Error(`File URL is required for file ${index + 1} when using URL import method`);
|
||||
}
|
||||
jobTasks[taskName] = {
|
||||
operation: 'import/url',
|
||||
url: file.url,
|
||||
...(file.filename && { filename: file.filename })
|
||||
};
|
||||
} else if (import_method === 'stored_file') {
|
||||
if (!file.stored_file_id) {
|
||||
throw new Error(`Stored File ID is required for file ${index + 1} when using stored file import method`);
|
||||
}
|
||||
if (!context.server?.apiUrl) {
|
||||
throw new Error('Server API URL is not available. Please check your Activepieces server configuration.');
|
||||
}
|
||||
const baseUrl = context.server.apiUrl.replace(/\/$/, '');
|
||||
const fileUrl = `${baseUrl}/v1/step-files/${file.stored_file_id}`;
|
||||
|
||||
try {
|
||||
new URL(fileUrl);
|
||||
} catch (urlError) {
|
||||
throw new Error(`Invalid file URL constructed: ${fileUrl}. URL Error: ${urlError instanceof Error ? urlError.message : String(urlError)}`);
|
||||
}
|
||||
jobTasks[taskName] = {
|
||||
operation: 'import/url',
|
||||
url: fileUrl,
|
||||
...(file.filename && { filename: file.filename })
|
||||
};
|
||||
} else if (import_method === 'upload') {
|
||||
if (!file.file || !file.file.base64) {
|
||||
throw new Error(`Please select a file to upload for file ${index + 1}`);
|
||||
}
|
||||
throw new Error('Upload method for multiple files is not yet supported with the new job format. Please use URL or stored file methods.');
|
||||
} else {
|
||||
throw new Error('Invalid import method selected');
|
||||
}
|
||||
});
|
||||
|
||||
// Collect all import task names
|
||||
const importTaskNames = files.map((_, index) => `import-file-${index + 1}`);
|
||||
|
||||
// Archive task
|
||||
const archiveOptions: any = {
|
||||
input: importTaskNames.length === 1 ? importTaskNames[0] : importTaskNames,
|
||||
output_format,
|
||||
};
|
||||
|
||||
if (filename) archiveOptions.filename = filename;
|
||||
if (engine) archiveOptions.engine = engine;
|
||||
if (engine_version) archiveOptions.engine_version = engine_version;
|
||||
if (timeout) archiveOptions.timeout = timeout;
|
||||
|
||||
jobTasks['archive-files'] = {
|
||||
operation: 'archive',
|
||||
...archiveOptions
|
||||
};
|
||||
|
||||
// Export task
|
||||
jobTasks['export-file'] = {
|
||||
operation: 'export/url',
|
||||
input: 'archive-files'
|
||||
};
|
||||
|
||||
const job = await client.createJob(jobTasks, `archive-${Date.now()}`);
|
||||
|
||||
if (wait_for_completion) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const currentJob = await client.getJob(job.id);
|
||||
|
||||
if (currentJob.status === 'finished') {
|
||||
// Find the export task by name in the job
|
||||
const exportTaskData = currentJob.tasks?.find((task: any) => task.name === 'export-file');
|
||||
const downloadUrl = exportTaskData?.result?.files?.[0]?.url;
|
||||
const outputFilename = exportTaskData?.result?.files?.[0]?.filename || `archive.${output_format}`;
|
||||
|
||||
let storedFileId: string | undefined;
|
||||
if (store_file && downloadUrl) {
|
||||
try {
|
||||
const fileResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: downloadUrl,
|
||||
});
|
||||
|
||||
if (fileResponse.status === 200 && fileResponse.body) {
|
||||
let fileData: Buffer;
|
||||
if (typeof fileResponse.body === 'string') {
|
||||
fileData = Buffer.from(fileResponse.body, 'binary');
|
||||
} else {
|
||||
fileData = Buffer.from(fileResponse.body as ArrayBuffer);
|
||||
}
|
||||
storedFileId = await context.files.write({
|
||||
data: fileData,
|
||||
fileName: outputFilename,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue without throwing
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
job: currentJob,
|
||||
download_url: downloadUrl,
|
||||
filename: outputFilename,
|
||||
stored_file_id: storedFileId,
|
||||
file_count: files.length,
|
||||
output_format,
|
||||
size: exportTaskData?.result?.files?.[0]?.size || 0
|
||||
};
|
||||
} else if (currentJob.status === 'error') {
|
||||
throw new Error(`Archive job failed: ${currentJob.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
throw new Error('Archive creation did not complete within the timeout period');
|
||||
}
|
||||
|
||||
return {
|
||||
job,
|
||||
file_count: files.length,
|
||||
output_format,
|
||||
status: 'processing'
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error(`Archive creation failed: ${String(error)}`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,362 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation, httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudconvertAuth, CloudConvertClient, captureWebsiteSchema } from '../common';
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
|
||||
const captureWebsiteProps = () => ({
|
||||
url: Property.ShortText({
|
||||
displayName: 'Website URL',
|
||||
description: 'The URL of the website to capture',
|
||||
required: true,
|
||||
}),
|
||||
output_format: Property.StaticDropdown({
|
||||
displayName: 'Output Format',
|
||||
description: 'The target format to convert to',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'PDF', value: 'pdf' },
|
||||
{ label: 'PNG', value: 'png' },
|
||||
{ label: 'JPG', value: 'jpg' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'pdf'
|
||||
}),
|
||||
pages: Property.ShortText({
|
||||
displayName: 'Pages',
|
||||
description: 'Page range (e.g. 1-3) or comma separated list (e.g. 1,2,3) of pages',
|
||||
required: false,
|
||||
}),
|
||||
zoom: Property.Number({
|
||||
displayName: 'Zoom Level',
|
||||
description: 'Zoom level to display the website. Defaults to 1',
|
||||
required: false,
|
||||
}),
|
||||
page_width: Property.Number({
|
||||
displayName: 'Page Width (cm)',
|
||||
description: 'Page width in cm',
|
||||
required: false,
|
||||
}),
|
||||
page_height: Property.Number({
|
||||
displayName: 'Page Height (cm)',
|
||||
description: 'Page height in cm',
|
||||
required: false,
|
||||
}),
|
||||
page_format: Property.StaticDropdown({
|
||||
displayName: 'Page Format',
|
||||
description: 'Paper format type when printing a PDF. Overrides page_width and page_height',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Letter', value: 'letter' },
|
||||
{ label: 'Legal', value: 'legal' },
|
||||
{ label: 'Tabloid', value: 'tabloid' },
|
||||
{ label: 'Ledger', value: 'ledger' },
|
||||
{ label: 'A0', value: 'a0' },
|
||||
{ label: 'A1', value: 'a1' },
|
||||
{ label: 'A2', value: 'a2' },
|
||||
{ label: 'A3', value: 'a3' },
|
||||
{ label: 'A4', value: 'a4' },
|
||||
{ label: 'A5', value: 'a5' },
|
||||
{ label: 'A6', value: 'a6' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
page_orientation: Property.StaticDropdown({
|
||||
displayName: 'Page Orientation',
|
||||
description: 'Page orientation for PDF output',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Portrait', value: 'portrait' },
|
||||
{ label: 'Landscape', value: 'landscape' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'portrait'
|
||||
}),
|
||||
margin_top: Property.Number({
|
||||
displayName: 'Top Margin (mm)',
|
||||
description: 'Page top margin in mm',
|
||||
required: false,
|
||||
}),
|
||||
margin_bottom: Property.Number({
|
||||
displayName: 'Bottom Margin (mm)',
|
||||
description: 'Page bottom margin in mm',
|
||||
required: false,
|
||||
}),
|
||||
margin_left: Property.Number({
|
||||
displayName: 'Left Margin (mm)',
|
||||
description: 'Page left margin in mm',
|
||||
required: false,
|
||||
}),
|
||||
margin_right: Property.Number({
|
||||
displayName: 'Right Margin (mm)',
|
||||
description: 'Page right margin in mm',
|
||||
required: false,
|
||||
}),
|
||||
print_background: Property.Checkbox({
|
||||
displayName: 'Print Background',
|
||||
description: 'Render the background of websites',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
display_header_footer: Property.Checkbox({
|
||||
displayName: 'Display Header/Footer',
|
||||
description: 'Create a header and a footer with the URL and page numbers',
|
||||
required: false,
|
||||
}),
|
||||
header_template: Property.LongText({
|
||||
displayName: 'Header Template',
|
||||
description: 'HTML template for the print header with classes: date, title, url, pageNumber, totalPages',
|
||||
required: false,
|
||||
}),
|
||||
footer_template: Property.LongText({
|
||||
displayName: 'Footer Template',
|
||||
description: 'HTML template for the print footer with classes: date, title, url, pageNumber, totalPages',
|
||||
required: false,
|
||||
}),
|
||||
wait_until: Property.StaticDropdown({
|
||||
displayName: 'Wait Until',
|
||||
description: 'When to consider navigation finished',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Load Event', value: 'load' },
|
||||
{ label: 'DOMContentLoaded', value: 'domcontentloaded' },
|
||||
{ label: 'Network Idle (0 connections)', value: 'networkidle0' },
|
||||
{ label: 'Network Idle (2 connections)', value: 'networkidle2' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'load'
|
||||
}),
|
||||
wait_for_element: Property.ShortText({
|
||||
displayName: 'Wait for Element',
|
||||
description: 'CSS selector for element to wait for (e.g. "body" or "#element")',
|
||||
required: false,
|
||||
}),
|
||||
wait_time: Property.Number({
|
||||
displayName: 'Wait Time (ms)',
|
||||
description: 'Additional time in ms to wait after the page load',
|
||||
required: false,
|
||||
}),
|
||||
css_media_type: Property.StaticDropdown({
|
||||
displayName: 'CSS Media Type',
|
||||
description: 'Changes the CSS media type of the page',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Print', value: 'print' },
|
||||
{ label: 'Screen', value: 'screen' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'print'
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Output Filename',
|
||||
description: 'Choose a filename (including extension) for the output file',
|
||||
required: false,
|
||||
defaultValue: 'captured-website'
|
||||
}),
|
||||
engine: Property.StaticDropdown({
|
||||
displayName: 'Engine',
|
||||
description: 'Use a specific engine for the conversion',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Chrome (Default)', value: 'chrome' },
|
||||
{ label: 'wkhtmltopdf', value: 'wkhtml' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
engine_version: Property.ShortText({
|
||||
displayName: 'Engine Version',
|
||||
description: 'Use a specific engine version for the conversion',
|
||||
required: false,
|
||||
}),
|
||||
timeout: Property.Number({
|
||||
displayName: 'Timeout (seconds)',
|
||||
description: 'Timeout in seconds after the task will be cancelled',
|
||||
required: false,
|
||||
}),
|
||||
wait_for_completion: Property.Checkbox({
|
||||
displayName: 'Wait for Completion',
|
||||
description: 'Wait for the capture to complete before returning',
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
}),
|
||||
store_file: Property.Checkbox({
|
||||
displayName: 'Store File',
|
||||
description: 'Download and store the captured file in Activepieces',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
});
|
||||
|
||||
export const captureWebsite = createAction({
|
||||
name: 'capture_website',
|
||||
displayName: 'Capture Website',
|
||||
description: 'Capture webpage as PDF, screenshot PNG, or JPG from a URL',
|
||||
auth: cloudconvertAuth,
|
||||
requireAuth: true,
|
||||
props: captureWebsiteProps(),
|
||||
async run(context) {
|
||||
await captureWebsiteSchema.parseAsync(context.propsValue);
|
||||
|
||||
const {
|
||||
url,
|
||||
output_format,
|
||||
pages,
|
||||
zoom,
|
||||
page_width,
|
||||
page_height,
|
||||
page_format,
|
||||
page_orientation,
|
||||
margin_top,
|
||||
margin_bottom,
|
||||
margin_left,
|
||||
margin_right,
|
||||
print_background,
|
||||
display_header_footer,
|
||||
header_template,
|
||||
footer_template,
|
||||
wait_until,
|
||||
wait_for_element,
|
||||
wait_time,
|
||||
css_media_type,
|
||||
filename,
|
||||
engine,
|
||||
engine_version,
|
||||
timeout,
|
||||
wait_for_completion,
|
||||
store_file
|
||||
} = context.propsValue;
|
||||
|
||||
const client = new CloudConvertClient(context.auth);
|
||||
|
||||
try {
|
||||
const captureOptions: any = {
|
||||
url,
|
||||
output_format,
|
||||
};
|
||||
|
||||
if (pages) captureOptions.pages = pages;
|
||||
if (zoom !== undefined) captureOptions.zoom = zoom;
|
||||
if (page_width !== undefined) captureOptions.page_width = page_width;
|
||||
if (page_height !== undefined) captureOptions.page_height = page_height;
|
||||
if (page_format) captureOptions.page_format = page_format;
|
||||
if (page_orientation) captureOptions.page_orientation = page_orientation;
|
||||
if (margin_top !== undefined) captureOptions.margin_top = margin_top;
|
||||
if (margin_bottom !== undefined) captureOptions.margin_bottom = margin_bottom;
|
||||
if (margin_left !== undefined) captureOptions.margin_left = margin_left;
|
||||
if (margin_right !== undefined) captureOptions.margin_right = margin_right;
|
||||
if (print_background !== undefined) captureOptions.print_background = print_background;
|
||||
if (display_header_footer !== undefined) captureOptions.display_header_footer = display_header_footer;
|
||||
if (header_template) captureOptions.header_template = header_template;
|
||||
if (footer_template) captureOptions.footer_template = footer_template;
|
||||
if (wait_until) captureOptions.wait_until = wait_until;
|
||||
if (wait_for_element) captureOptions.wait_for_element = wait_for_element;
|
||||
if (wait_time !== undefined) captureOptions.wait_time = wait_time;
|
||||
if (css_media_type) captureOptions.css_media_type = css_media_type;
|
||||
if (filename) captureOptions.filename = filename;
|
||||
if (engine) captureOptions.engine = engine;
|
||||
if (engine_version) captureOptions.engine_version = engine_version;
|
||||
if (timeout !== undefined) captureOptions.timeout = timeout;
|
||||
|
||||
const captureTask = await client.createCaptureTask(captureOptions);
|
||||
|
||||
if (wait_for_completion) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const currentTask = await client.getTask(captureTask.id);
|
||||
|
||||
if (currentTask.status === 'finished') {
|
||||
break;
|
||||
} else if (currentTask.status === 'error') {
|
||||
throw new Error(`Capture task failed: ${currentTask.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
if (attempts >= maxAttempts) {
|
||||
throw new Error('Capture task did not complete within the timeout period');
|
||||
}
|
||||
}
|
||||
|
||||
const exportTask = await client.createExportTask(captureTask.id);
|
||||
|
||||
if (wait_for_completion) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const exportTaskData = await client.getTask(exportTask.id);
|
||||
|
||||
if (exportTaskData.status === 'finished') {
|
||||
const downloadUrl = exportTaskData.result?.files?.[0]?.url;
|
||||
const filename = exportTaskData.result?.files?.[0]?.filename || 'captured-website.pdf';
|
||||
|
||||
let storedFileId: string | undefined;
|
||||
if (store_file && downloadUrl) {
|
||||
try {
|
||||
const fileResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: downloadUrl,
|
||||
});
|
||||
|
||||
if (fileResponse.status === 200 && fileResponse.body) {
|
||||
let fileData: Buffer;
|
||||
if (typeof fileResponse.body === 'string') {
|
||||
fileData = Buffer.from(fileResponse.body, 'binary');
|
||||
} else {
|
||||
fileData = Buffer.from(fileResponse.body as ArrayBuffer);
|
||||
}
|
||||
storedFileId = await context.files.write({
|
||||
data: fileData,
|
||||
fileName: filename,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue without throwing
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
capture_task: captureTask,
|
||||
export_task: exportTaskData,
|
||||
download_url: downloadUrl,
|
||||
filename,
|
||||
stored_file_id: storedFileId,
|
||||
url,
|
||||
output_format,
|
||||
};
|
||||
} else if (exportTaskData.status === 'error') {
|
||||
throw new Error(`Export task failed: ${exportTaskData.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
throw new Error('Export did not complete within the timeout period');
|
||||
}
|
||||
|
||||
return {
|
||||
capture_task: captureTask,
|
||||
export_task: exportTask,
|
||||
url,
|
||||
output_format,
|
||||
status: 'processing',
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error(`Website capture failed: ${String(error)}`);
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
@@ -0,0 +1,257 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation, httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudconvertAuth, CloudConvertClient, convertFileProps, convertFileSchema } from '../common';
|
||||
|
||||
// Get the props function result
|
||||
const getConvertFileProps = convertFileProps;
|
||||
|
||||
export const convertFile = createAction({
|
||||
name: 'convert_file',
|
||||
displayName: 'Convert File',
|
||||
description: 'Create a basic file conversion task for a single file with desired output format',
|
||||
auth: cloudconvertAuth,
|
||||
requireAuth: true,
|
||||
props: getConvertFileProps(),
|
||||
async run(context) {
|
||||
await convertFileSchema.parseAsync(context.propsValue);
|
||||
|
||||
const { import_method, url, file, stored_file_id, input_format, output_format, filename, engine, engine_version, timeout, wait_for_completion, store_file } = context.propsValue;
|
||||
|
||||
const client = new CloudConvertClient(context.auth);
|
||||
|
||||
try {
|
||||
const supportedFormats = await client.getSupportedFormats({
|
||||
inputFormat: input_format === 'auto' ? undefined : input_format,
|
||||
outputFormat: output_format as string,
|
||||
include: ['options', 'engine_versions']
|
||||
});
|
||||
|
||||
if (supportedFormats.length === 0) {
|
||||
const allOutputFormats = await client.getSupportedFormats({
|
||||
outputFormat: output_format as string,
|
||||
include: ['options', 'engine_versions']
|
||||
});
|
||||
|
||||
throw new Error(`Conversion from ${input_format || 'auto-detected format'} to ${output_format} is not supported by CloudConvert. Available input formats for ${output_format}: ${allOutputFormats.map((f: any) => f.input_format).join(', ')}`);
|
||||
}
|
||||
|
||||
const engines = [...new Set(supportedFormats.map((f: any) => f.engine))];
|
||||
|
||||
const jobTasks: Record<string, any> = {};
|
||||
|
||||
if (import_method === 'url') {
|
||||
if (!url) {
|
||||
throw new Error('File URL is required when using URL import method');
|
||||
}
|
||||
jobTasks['import-file'] = {
|
||||
operation: 'import/url',
|
||||
url: url,
|
||||
...(filename && { filename })
|
||||
};
|
||||
} else if (import_method === 'stored_file') {
|
||||
if (!stored_file_id) {
|
||||
throw new Error('Stored File ID is required when using stored file import method');
|
||||
}
|
||||
if (!context.server?.apiUrl) {
|
||||
throw new Error('Server API URL is not available. Please check your Activepieces server configuration.');
|
||||
}
|
||||
const baseUrl = context.server.apiUrl.replace(/\/$/, '');
|
||||
const fileUrl = `${baseUrl}/v1/step-files/${stored_file_id}`;
|
||||
|
||||
try {
|
||||
new URL(fileUrl);
|
||||
} catch (urlError) {
|
||||
throw new Error(`Invalid file URL constructed: ${fileUrl}. URL Error: ${urlError instanceof Error ? urlError.message : String(urlError)}`);
|
||||
}
|
||||
jobTasks['import-file'] = {
|
||||
operation: 'import/url',
|
||||
url: fileUrl,
|
||||
...(filename && { filename })
|
||||
};
|
||||
} else if (import_method === 'upload') {
|
||||
if (!file || !file.base64) {
|
||||
throw new Error('Please select a file to upload from your device');
|
||||
}
|
||||
const uploadTask = await client.createUploadTask(file.filename || 'uploaded-file');
|
||||
|
||||
const uploadUrl = uploadTask.result.form.url;
|
||||
const uploadForm = uploadTask.result.form.parameters;
|
||||
|
||||
const formData = new FormData();
|
||||
|
||||
Object.entries(uploadForm).forEach(([key, value]) => {
|
||||
formData.append(key, value as string);
|
||||
});
|
||||
|
||||
if (file.base64) {
|
||||
const buffer = Buffer.from(file.base64, 'base64');
|
||||
const blob = new Blob([buffer], { type: file.extension ? `application/${file.extension}` : 'application/octet-stream' });
|
||||
formData.append('file', blob, file.filename);
|
||||
}
|
||||
|
||||
const uploadResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: uploadUrl,
|
||||
body: formData,
|
||||
});
|
||||
|
||||
if (uploadResponse.status < 200 || uploadResponse.status >= 300) {
|
||||
throw new Error(`Failed to upload file: HTTP ${uploadResponse.status} - ${uploadResponse.body?.message || 'Upload failed'}`);
|
||||
}
|
||||
|
||||
jobTasks['import-file'] = {
|
||||
operation: 'import/upload',
|
||||
...(filename && { filename })
|
||||
};
|
||||
} else {
|
||||
throw new Error('Invalid import method selected');
|
||||
}
|
||||
|
||||
const convertOptions: any = {
|
||||
input: 'import-file',
|
||||
output_format,
|
||||
};
|
||||
|
||||
if (input_format && input_format !== 'auto') {
|
||||
convertOptions.input_format = input_format;
|
||||
}
|
||||
|
||||
if (filename) {
|
||||
convertOptions.filename = filename;
|
||||
}
|
||||
|
||||
if (engine) {
|
||||
if (!engines.includes(engine)) {
|
||||
convertOptions.engine = engines[0];
|
||||
} else {
|
||||
convertOptions.engine = engine;
|
||||
}
|
||||
} else if (engines.length > 0) {
|
||||
convertOptions.engine = engines[0];
|
||||
}
|
||||
|
||||
if (engine_version) convertOptions.engine_version = engine_version;
|
||||
if (timeout) convertOptions.timeout = timeout;
|
||||
|
||||
jobTasks['convert-file'] = {
|
||||
operation: 'convert',
|
||||
...convertOptions
|
||||
};
|
||||
|
||||
jobTasks['export-file'] = {
|
||||
operation: 'export/url',
|
||||
input: 'convert-file'
|
||||
};
|
||||
|
||||
const job = await client.createJob(jobTasks, `convert-${Date.now()}`);
|
||||
|
||||
if (wait_for_completion) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const currentJob = await client.getJob(job.id);
|
||||
|
||||
if (currentJob.status === 'finished') {
|
||||
const exportTaskData = currentJob.tasks?.find((task: any) => task.name === 'export-file');
|
||||
const downloadUrl = exportTaskData?.result?.files?.[0]?.url;
|
||||
const outputFilename = exportTaskData?.result?.files?.[0]?.filename || `converted-${output_format}`;
|
||||
|
||||
let storedFileId: string | undefined;
|
||||
if (store_file && downloadUrl) {
|
||||
try {
|
||||
if (!downloadUrl || typeof downloadUrl !== 'string') {
|
||||
throw new Error(`Invalid download URL: ${downloadUrl}`);
|
||||
}
|
||||
|
||||
try {
|
||||
new URL(downloadUrl);
|
||||
} catch (urlError) {
|
||||
throw new Error(`Invalid download URL format: ${downloadUrl} - ${urlError instanceof Error ? urlError.message : String(urlError)}`);
|
||||
}
|
||||
|
||||
const fileResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: downloadUrl,
|
||||
});
|
||||
|
||||
if (fileResponse.status === 200 && fileResponse.body) {
|
||||
let fileData: Buffer;
|
||||
if (typeof fileResponse.body === 'string') {
|
||||
fileData = Buffer.from(fileResponse.body, 'binary');
|
||||
} else {
|
||||
fileData = Buffer.from(fileResponse.body as ArrayBuffer);
|
||||
}
|
||||
storedFileId = await context.files.write({
|
||||
data: fileData,
|
||||
fileName: outputFilename,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue without throwing
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
job: currentJob,
|
||||
download_url: downloadUrl,
|
||||
filename: outputFilename,
|
||||
stored_file_id: storedFileId,
|
||||
input_format,
|
||||
output_format,
|
||||
};
|
||||
} else if (currentJob.status === 'error') {
|
||||
const failedTasks = currentJob.tasks?.filter((task: any) => task.status === 'error') || [];
|
||||
let errorMessage = `Conversion job failed: ${currentJob.message || 'Unknown error'}`;
|
||||
|
||||
if (failedTasks.length > 0) {
|
||||
const taskErrors = failedTasks.map((task: any) => {
|
||||
let taskError = `${task.name} (${task.operation})`;
|
||||
if (task.code) taskError += ` - Code: ${task.code}`;
|
||||
if (task.message) taskError += ` - ${task.message}`;
|
||||
if (task.engine) taskError += ` - Engine: ${task.engine}`;
|
||||
if (task.engine_version) taskError += ` v${task.engine_version}`;
|
||||
return taskError;
|
||||
}).join('; ');
|
||||
errorMessage += `\n\nTask errors: ${taskErrors}`;
|
||||
|
||||
const convertTask = failedTasks.find((task: any) => task.operation === 'convert');
|
||||
if (convertTask) {
|
||||
if (convertTask.engine === 'pdftron-pdf2word' && convertTask.code === 'UNKNOWN_ERROR') {
|
||||
errorMessage += '\n\nThis appears to be a file-specific issue. PDFs from website captures often contain complex layouts or images that cannot be converted to editable formats.';
|
||||
errorMessage += '\n\nSuggested alternatives:';
|
||||
errorMessage += '\n• Try converting to TXT (text only) or HTML format instead';
|
||||
errorMessage += '\n• Use RTF format which is simpler than DOCX';
|
||||
errorMessage += '\n• If this is a scanned/image-based PDF, it may need OCR processing';
|
||||
errorMessage += '\n• Consider capturing the website directly to HTML instead of PDF→DOCX';
|
||||
} else if (convertTask.engine === 'pdftron-pdf2word') {
|
||||
errorMessage += '\n\nTip: Try converting without specifying an engine, or try a different engine for better compatibility.';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
throw new Error('Conversion did not complete within the timeout period');
|
||||
}
|
||||
|
||||
return {
|
||||
job,
|
||||
input_format,
|
||||
output_format,
|
||||
status: 'processing',
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error(`File conversion failed: ${String(error)}`);
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
@@ -0,0 +1,195 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation, httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudconvertAuth, CloudConvertClient, downloadFileSchema } from '../common';
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
|
||||
const downloadFileProps = () => ({
|
||||
task_id: Property.ShortText({
|
||||
displayName: 'Task ID',
|
||||
description: 'ID of the CloudConvert task to retrieve',
|
||||
required: true,
|
||||
}),
|
||||
include: Property.MultiSelectDropdown({
|
||||
auth: cloudconvertAuth,
|
||||
displayName: 'Include Additional Data',
|
||||
description: 'Additional data to include in the response',
|
||||
required: false,
|
||||
refreshers: [],
|
||||
options: async () => ({
|
||||
options: [
|
||||
{ label: 'Retries', value: 'retries' },
|
||||
{ label: 'Depends On Tasks', value: 'depends_on_tasks' },
|
||||
{ label: 'Payload', value: 'payload' },
|
||||
{ label: 'Job', value: 'job' },
|
||||
]
|
||||
})
|
||||
}),
|
||||
store_file: Property.Checkbox({
|
||||
displayName: 'Store File',
|
||||
description: 'Download and store the output files in Activepieces',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
});
|
||||
|
||||
export const downloadFile = createAction({
|
||||
name: 'download_file',
|
||||
displayName: 'Download a File',
|
||||
description: 'Downloads output from a completed task',
|
||||
auth: cloudconvertAuth,
|
||||
requireAuth: true,
|
||||
props: downloadFileProps(),
|
||||
async run(context) {
|
||||
await downloadFileSchema.parseAsync(context.propsValue);
|
||||
|
||||
const { task_id, include, store_file } = context.propsValue;
|
||||
|
||||
const client = new CloudConvertClient(context.auth);
|
||||
|
||||
try {
|
||||
const queryParams: Record<string, string> = {};
|
||||
if (include && Array.isArray(include) && include.length > 0) {
|
||||
queryParams['include'] = include.join(',');
|
||||
}
|
||||
|
||||
const task = await client.getTask(task_id, queryParams);
|
||||
|
||||
if (task.status !== 'finished') {
|
||||
throw new Error(`Task is not finished. Current status: ${task.status}. ${task.message || ''}`);
|
||||
}
|
||||
|
||||
let downloadTask = task;
|
||||
let exportTaskId: string | undefined;
|
||||
|
||||
if (task.operation !== 'export/url' && task.result?.files && task.result.files.length > 0) {
|
||||
const hasDownloadUrls = task.result.files.some((file: any) => file.url);
|
||||
|
||||
if (!hasDownloadUrls) {
|
||||
try {
|
||||
const exportTask = await client.createExportTask(task_id);
|
||||
exportTaskId = exportTask.id;
|
||||
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const exportTaskData = await client.getTask(exportTask.id);
|
||||
|
||||
if (exportTaskData.status === 'finished') {
|
||||
downloadTask = exportTaskData;
|
||||
break;
|
||||
} else if (exportTaskData.status === 'error') {
|
||||
throw new Error(`Export task failed: ${exportTaskData.message || 'Unknown error'}. Code: ${exportTaskData.code || 'N/A'}`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 2000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
if (attempts >= maxAttempts) {
|
||||
throw new Error('Export task did not complete within the timeout period');
|
||||
}
|
||||
} catch (exportError) {
|
||||
// Continue with original task
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const result: any = {
|
||||
id: task.id,
|
||||
job_id: task.job_id,
|
||||
name: task.name,
|
||||
operation: task.operation,
|
||||
status: task.status,
|
||||
message: task.message,
|
||||
code: task.code,
|
||||
credits: task.credits,
|
||||
created_at: task.created_at,
|
||||
started_at: task.started_at,
|
||||
ended_at: task.ended_at,
|
||||
engine: task.engine,
|
||||
engine_version: task.engine_version,
|
||||
...(exportTaskId && { export_task_id: exportTaskId }),
|
||||
};
|
||||
|
||||
if (task.depends_on_tasks) {
|
||||
result.depends_on_tasks = task.depends_on_tasks;
|
||||
}
|
||||
if (task.retry_of_task_id) {
|
||||
result.retry_of_task_id = task.retry_of_task_id;
|
||||
}
|
||||
if (task.retries) {
|
||||
result.retries = task.retries;
|
||||
}
|
||||
if (task.payload) {
|
||||
result.payload = task.payload;
|
||||
}
|
||||
if (downloadTask.result) {
|
||||
result.result = downloadTask.result;
|
||||
|
||||
if (downloadTask.result.files && downloadTask.result.files.length > 0) {
|
||||
result.download_urls = downloadTask.result.files.map((file: any) => ({
|
||||
filename: file.filename,
|
||||
url: file.url,
|
||||
size: file.size,
|
||||
}));
|
||||
|
||||
if (store_file) {
|
||||
result.stored_files = [];
|
||||
|
||||
for (const file of downloadTask.result.files) {
|
||||
try {
|
||||
if (!file.url || typeof file.url !== 'string') {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
new URL(file.url);
|
||||
} catch (urlError) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const fileResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: file.url,
|
||||
});
|
||||
|
||||
if (fileResponse.status === 200 && fileResponse.body) {
|
||||
let fileData: Buffer;
|
||||
if (typeof fileResponse.body === 'string') {
|
||||
fileData = Buffer.from(fileResponse.body, 'binary');
|
||||
} else {
|
||||
fileData = Buffer.from(fileResponse.body as ArrayBuffer);
|
||||
}
|
||||
|
||||
const storedFileId = await context.files.write({
|
||||
data: fileData,
|
||||
fileName: file.filename || `downloaded-file-${Date.now()}`,
|
||||
});
|
||||
|
||||
result.stored_files.push({
|
||||
filename: file.filename,
|
||||
size: file.size,
|
||||
stored_file_id: storedFileId,
|
||||
original_url: file.url,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue with next file
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error(`Task retrieval failed: ${String(error)}`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,252 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation, httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudconvertAuth, CloudConvertClient, mergePdfSchema } from '../common';
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
|
||||
const mergePdfProps = () => ({
|
||||
import_method: Property.StaticDropdown({
|
||||
displayName: 'Import Method',
|
||||
description: 'How to import the files for merging',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'File Upload', value: 'upload' },
|
||||
{ label: 'File URL', value: 'url' },
|
||||
{ label: 'Stored File ID', value: 'stored_file' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'upload'
|
||||
}),
|
||||
files: Property.Array({
|
||||
displayName: 'Files to Merge',
|
||||
description: 'List of files to merge into a single PDF',
|
||||
required: true,
|
||||
properties: {
|
||||
url: Property.ShortText({
|
||||
displayName: 'File URL',
|
||||
description: 'URL of the file to merge',
|
||||
required: false,
|
||||
}),
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'File to upload and merge',
|
||||
required: false,
|
||||
}),
|
||||
stored_file_id: Property.ShortText({
|
||||
displayName: 'Stored File ID',
|
||||
description: 'ID of a previously stored file in Activepieces to merge',
|
||||
required: false,
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Filename in PDF',
|
||||
description: 'Optional filename for this file within the PDF',
|
||||
required: false,
|
||||
})
|
||||
}
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Output Filename',
|
||||
description: 'Choose a filename (including extension) for the output file',
|
||||
required: false,
|
||||
defaultValue: 'merged-document.pdf'
|
||||
}),
|
||||
engine: Property.StaticDropdown({
|
||||
displayName: 'Engine',
|
||||
description: 'Use a specific engine for the conversion',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: '3-Heights (Default)', value: '3heights' },
|
||||
{ label: 'PDFTron', value: 'pdftron' },
|
||||
{ label: 'MuPDF', value: 'mupdf' },
|
||||
{ label: 'Poppler', value: 'poppler' },
|
||||
{ label: 'LibreOffice', value: 'libreoffice' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
engine_version: Property.ShortText({
|
||||
displayName: 'Engine Version',
|
||||
description: 'Use a specific engine version for the conversion',
|
||||
required: false,
|
||||
}),
|
||||
timeout: Property.Number({
|
||||
displayName: 'Timeout (seconds)',
|
||||
description: 'Timeout in seconds after which the task will be cancelled',
|
||||
required: false,
|
||||
}),
|
||||
wait_for_completion: Property.Checkbox({
|
||||
displayName: 'Wait for Completion',
|
||||
description: 'Wait for the merge to complete before returning',
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
}),
|
||||
store_file: Property.Checkbox({
|
||||
displayName: 'Store File',
|
||||
description: 'Download and store the merged PDF in Activepieces',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
});
|
||||
|
||||
export const mergePdf = createAction({
|
||||
name: 'merge_pdf',
|
||||
displayName: 'Merge Files to PDF',
|
||||
description: 'Combine multiple documents/images into a single PDF',
|
||||
auth: cloudconvertAuth,
|
||||
requireAuth: true,
|
||||
props: mergePdfProps(),
|
||||
async run(context) {
|
||||
await mergePdfSchema.parseAsync(context.propsValue);
|
||||
const { import_method, files, filename, engine, engine_version, timeout, wait_for_completion, store_file } = context.propsValue;
|
||||
|
||||
if (!files || files.length < 2) {
|
||||
throw new Error('At least 2 files are required for merging');
|
||||
}
|
||||
|
||||
const client = new CloudConvertClient(context.auth);
|
||||
|
||||
try {
|
||||
const jobTasks: Record<string, any> = {};
|
||||
|
||||
files.forEach((file: any, index: number) => {
|
||||
const taskName = `import-file-${index + 1}`;
|
||||
|
||||
if (import_method === 'url') {
|
||||
if (!file.url) {
|
||||
throw new Error(`File URL is required for file ${index + 1} when using URL import method`);
|
||||
}
|
||||
jobTasks[taskName] = {
|
||||
operation: 'import/url',
|
||||
url: file.url,
|
||||
...(file.filename && { filename: file.filename })
|
||||
};
|
||||
} else if (import_method === 'stored_file') {
|
||||
if (!file.stored_file_id) {
|
||||
throw new Error(`Stored File ID is required for file ${index + 1} when using stored file import method`);
|
||||
}
|
||||
if (!context.server?.apiUrl) {
|
||||
throw new Error('Server API URL is not available. Please check your Activepieces server configuration.');
|
||||
}
|
||||
const baseUrl = context.server.apiUrl.replace(/\/$/, '');
|
||||
const fileUrl = `${baseUrl}/v1/step-files/${file.stored_file_id}`;
|
||||
|
||||
try {
|
||||
new URL(fileUrl);
|
||||
} catch (urlError) {
|
||||
throw new Error(`Invalid file URL constructed: ${fileUrl}. URL Error: ${urlError instanceof Error ? urlError.message : String(urlError)}`);
|
||||
}
|
||||
jobTasks[taskName] = {
|
||||
operation: 'import/url',
|
||||
url: fileUrl,
|
||||
...(file.filename && { filename: file.filename })
|
||||
};
|
||||
} else if (import_method === 'upload') {
|
||||
if (!file.file || !file.file.base64) {
|
||||
throw new Error(`Please select a file to upload for file ${index + 1}`);
|
||||
}
|
||||
throw new Error('Upload method for multiple files is not yet supported with the new job format. Please use URL or stored file methods.');
|
||||
} else {
|
||||
throw new Error('Invalid import method selected');
|
||||
}
|
||||
});
|
||||
|
||||
// Collect all import task names
|
||||
const importTaskNames = files.map((_, index) => `import-file-${index + 1}`);
|
||||
|
||||
// Merge task
|
||||
const mergeOptions: any = {
|
||||
input: importTaskNames.length === 1 ? importTaskNames[0] : importTaskNames,
|
||||
output_format: 'pdf',
|
||||
};
|
||||
|
||||
if (filename) mergeOptions.filename = filename;
|
||||
if (engine) mergeOptions.engine = engine;
|
||||
if (engine_version) mergeOptions.engine_version = engine_version;
|
||||
if (timeout) mergeOptions.timeout = timeout;
|
||||
|
||||
jobTasks['merge-files'] = {
|
||||
operation: 'merge',
|
||||
...mergeOptions
|
||||
};
|
||||
|
||||
// Export task
|
||||
jobTasks['export-file'] = {
|
||||
operation: 'export/url',
|
||||
input: 'merge-files'
|
||||
};
|
||||
|
||||
const job = await client.createJob(jobTasks, `merge-${Date.now()}`);
|
||||
|
||||
if (wait_for_completion) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const currentJob = await client.getJob(job.id);
|
||||
|
||||
if (currentJob.status === 'finished') {
|
||||
// Find the export task by name in the job
|
||||
const exportTaskData = currentJob.tasks?.find((task: any) => task.name === 'export-file');
|
||||
const downloadUrl = exportTaskData?.result?.files?.[0]?.url;
|
||||
const outputFilename = exportTaskData?.result?.files?.[0]?.filename || 'merged-document.pdf';
|
||||
|
||||
let storedFileId: string | undefined;
|
||||
if (store_file && downloadUrl) {
|
||||
try {
|
||||
const fileResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: downloadUrl,
|
||||
});
|
||||
|
||||
if (fileResponse.status === 200 && fileResponse.body) {
|
||||
let fileData: Buffer;
|
||||
if (typeof fileResponse.body === 'string') {
|
||||
fileData = Buffer.from(fileResponse.body, 'binary');
|
||||
} else {
|
||||
fileData = Buffer.from(fileResponse.body as ArrayBuffer);
|
||||
}
|
||||
storedFileId = await context.files.write({
|
||||
data: fileData,
|
||||
fileName: outputFilename,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue without throwing
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
job: currentJob,
|
||||
download_url: downloadUrl,
|
||||
filename: outputFilename,
|
||||
stored_file_id: storedFileId,
|
||||
file_count: files.length,
|
||||
output_format: 'pdf',
|
||||
};
|
||||
} else if (currentJob.status === 'error') {
|
||||
throw new Error(`Merge job failed: ${currentJob.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
throw new Error('Merge did not complete within the timeout period');
|
||||
}
|
||||
|
||||
return {
|
||||
job,
|
||||
file_count: files.length,
|
||||
output_format: 'pdf',
|
||||
status: 'processing',
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error(`Merge failed: ${String(error)}`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,304 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { propsValidation, httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { cloudconvertAuth, CloudConvertClient, optimizeFileSchema } from '../common';
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
|
||||
const optimizeFileProps = () => ({
|
||||
import_method: Property.StaticDropdown({
|
||||
displayName: 'Import Method',
|
||||
description: 'How to import the file for optimization',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'File Upload', value: 'upload' },
|
||||
{ label: 'File URL', value: 'url' },
|
||||
{ label: 'Stored File ID', value: 'stored_file' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'upload'
|
||||
}),
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'File to upload and optimize (PDF, PNG, JPG)',
|
||||
required: false,
|
||||
}),
|
||||
url: Property.ShortText({
|
||||
displayName: 'File URL',
|
||||
description: 'URL of the file to optimize',
|
||||
required: false,
|
||||
}),
|
||||
stored_file_id: Property.ShortText({
|
||||
displayName: 'Stored File ID',
|
||||
description: 'ID of a previously stored file in Activepieces to optimize',
|
||||
required: false,
|
||||
}),
|
||||
input_format: Property.StaticDropdown({
|
||||
displayName: 'Input Format',
|
||||
description: 'The current format of the file. If not set, the extension of the input file is used',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'PDF', value: 'pdf' },
|
||||
{ label: 'PNG', value: 'png' },
|
||||
{ label: 'JPG', value: 'jpg' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
profile: Property.StaticDropdown({
|
||||
displayName: 'Optimization Profile',
|
||||
description: 'Optimization profile for specific target needs',
|
||||
required: false,
|
||||
defaultValue: 'web',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Web - Remove redundant data for the web', value: 'web' },
|
||||
{ label: 'Print - Optimized for printing', value: 'print' },
|
||||
{ label: 'Archive - Optimized for archiving purposes', value: 'archive' },
|
||||
{ label: 'MRC - Optimized for scanned images', value: 'mrc' },
|
||||
{ label: 'Max - Maximal size reduction', value: 'max' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
flatten_signatures: Property.Checkbox({
|
||||
displayName: 'Flatten Signatures',
|
||||
description: 'Flatten visible signatures and keep them as non-editable graphics',
|
||||
required: false,
|
||||
defaultValue: false,
|
||||
}),
|
||||
colorspace: Property.StaticDropdown({
|
||||
displayName: 'Color Space',
|
||||
description: 'Color space of raster images',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Unchanged', value: 'unchanged' },
|
||||
{ label: 'RGB', value: 'rgb' },
|
||||
{ label: 'CMYK', value: 'cmyk' },
|
||||
{ label: 'Grayscale', value: 'grayscale' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Output Filename',
|
||||
description: 'Choose a filename (including extension) for the output file',
|
||||
required: false,
|
||||
defaultValue: 'optimized-document.pdf'
|
||||
}),
|
||||
engine: Property.StaticDropdown({
|
||||
displayName: 'Engine',
|
||||
description: 'Use a specific engine for the optimization',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: '3-Heights', value: '3heights' },
|
||||
{ label: 'PDF Tools', value: 'pdftools' },
|
||||
]
|
||||
}
|
||||
}),
|
||||
engine_version: Property.ShortText({
|
||||
displayName: 'Engine Version',
|
||||
description: 'Use a specific engine version for the optimization',
|
||||
required: false,
|
||||
}),
|
||||
timeout: Property.Number({
|
||||
displayName: 'Timeout (seconds)',
|
||||
description: 'Timeout in seconds after which the task will be cancelled',
|
||||
required: false,
|
||||
}),
|
||||
wait_for_completion: Property.Checkbox({
|
||||
displayName: 'Wait for Completion',
|
||||
description: 'Wait for the optimization to complete before returning',
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
}),
|
||||
store_file: Property.Checkbox({
|
||||
displayName: 'Store File',
|
||||
description: 'Download and store the optimized file in Activepieces',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
});
|
||||
|
||||
export const optimizeFile = createAction({
|
||||
name: 'optimize_file',
|
||||
displayName: 'Optimize File',
|
||||
description: 'Creates a task to optimize and compress a file',
|
||||
auth: cloudconvertAuth,
|
||||
requireAuth: true,
|
||||
props: optimizeFileProps(),
|
||||
async run(context) {
|
||||
await optimizeFileSchema.parseAsync(context.propsValue);
|
||||
const { import_method, url, file, stored_file_id, input_format, profile, flatten_signatures, colorspace, filename, engine, engine_version, timeout, wait_for_completion, store_file } = context.propsValue;
|
||||
|
||||
const client = new CloudConvertClient(context.auth);
|
||||
|
||||
try {
|
||||
const jobTasks: Record<string, any> = {};
|
||||
|
||||
// Import task
|
||||
if (import_method === 'url') {
|
||||
if (!url) {
|
||||
throw new Error('File URL is required when using URL import method');
|
||||
}
|
||||
jobTasks['import-file'] = {
|
||||
operation: 'import/url',
|
||||
url: url,
|
||||
...(filename && { filename })
|
||||
};
|
||||
} else if (import_method === 'stored_file') {
|
||||
if (!stored_file_id) {
|
||||
throw new Error('Stored File ID is required when using stored file import method');
|
||||
}
|
||||
if (!context.server?.apiUrl) {
|
||||
throw new Error('Server API URL is not available. Please check your Activepieces server configuration.');
|
||||
}
|
||||
const baseUrl = context.server.apiUrl.replace(/\/$/, '');
|
||||
const fileUrl = `${baseUrl}/v1/step-files/${stored_file_id}`;
|
||||
|
||||
try {
|
||||
new URL(fileUrl);
|
||||
} catch (urlError) {
|
||||
throw new Error(`Invalid file URL constructed: ${fileUrl}. URL Error: ${urlError instanceof Error ? urlError.message : String(urlError)}`);
|
||||
}
|
||||
jobTasks['import-file'] = {
|
||||
operation: 'import/url',
|
||||
url: fileUrl,
|
||||
...(filename && { filename })
|
||||
};
|
||||
} else if (import_method === 'upload') {
|
||||
if (!file || !file.base64) {
|
||||
throw new Error('Please select a file to upload from your device');
|
||||
}
|
||||
const uploadTask = await client.createUploadTask(file.filename || 'uploaded-file');
|
||||
|
||||
const uploadUrl = uploadTask.result.form.url;
|
||||
const uploadForm = uploadTask.result.form.parameters;
|
||||
|
||||
const formData = new FormData();
|
||||
|
||||
Object.entries(uploadForm).forEach(([key, value]) => {
|
||||
formData.append(key, value as string);
|
||||
});
|
||||
|
||||
if (file.base64) {
|
||||
const buffer = Buffer.from(file.base64, 'base64');
|
||||
const blob = new Blob([buffer], { type: file.extension ? `application/${file.extension}` : 'application/octet-stream' });
|
||||
formData.append('file', blob, file.filename);
|
||||
}
|
||||
|
||||
const uploadResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: uploadUrl,
|
||||
body: formData,
|
||||
});
|
||||
|
||||
if (uploadResponse.status < 200 || uploadResponse.status >= 300) {
|
||||
throw new Error(`Failed to upload file: HTTP ${uploadResponse.status} - ${uploadResponse.body?.message || 'Upload failed'}`);
|
||||
}
|
||||
|
||||
jobTasks['import-file'] = {
|
||||
operation: 'import/upload',
|
||||
...(filename && { filename })
|
||||
};
|
||||
} else {
|
||||
throw new Error('Invalid import method selected');
|
||||
}
|
||||
|
||||
const optimizeOptions: any = {
|
||||
input: 'import-file',
|
||||
};
|
||||
|
||||
if (input_format) optimizeOptions.input_format = input_format;
|
||||
if (profile) optimizeOptions.profile = profile;
|
||||
if (flatten_signatures !== undefined) optimizeOptions.flatten_signatures = flatten_signatures;
|
||||
if (colorspace) optimizeOptions.colorspace = colorspace;
|
||||
if (filename) optimizeOptions.filename = filename;
|
||||
if (engine) optimizeOptions.engine = engine;
|
||||
if (engine_version) optimizeOptions.engine_version = engine_version;
|
||||
if (timeout) optimizeOptions.timeout = timeout;
|
||||
|
||||
jobTasks['optimize-file'] = {
|
||||
operation: 'optimize',
|
||||
...optimizeOptions
|
||||
};
|
||||
|
||||
jobTasks['export-file'] = {
|
||||
operation: 'export/url',
|
||||
input: 'optimize-file'
|
||||
};
|
||||
|
||||
const job = await client.createJob(jobTasks, `optimize-${Date.now()}`);
|
||||
|
||||
if (wait_for_completion) {
|
||||
let attempts = 0;
|
||||
const maxAttempts = 60;
|
||||
|
||||
while (attempts < maxAttempts) {
|
||||
const currentJob = await client.getJob(job.id);
|
||||
|
||||
if (currentJob.status === 'finished') {
|
||||
const exportTaskData = currentJob.tasks?.find((task: any) => task.name === 'export-file');
|
||||
const downloadUrl = exportTaskData?.result?.files?.[0]?.url;
|
||||
const outputFilename = exportTaskData?.result?.files?.[0]?.filename || `optimized-${input_format || 'file'}`;
|
||||
|
||||
let storedFileId: string | undefined;
|
||||
if (store_file && downloadUrl) {
|
||||
try {
|
||||
const fileResponse = await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: downloadUrl,
|
||||
});
|
||||
|
||||
if (fileResponse.status === 200 && fileResponse.body) {
|
||||
let fileData: Buffer;
|
||||
if (typeof fileResponse.body === 'string') {
|
||||
fileData = Buffer.from(fileResponse.body, 'binary');
|
||||
} else {
|
||||
fileData = Buffer.from(fileResponse.body as ArrayBuffer);
|
||||
}
|
||||
storedFileId = await context.files.write({
|
||||
data: fileData,
|
||||
fileName: outputFilename,
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue without throwing
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
job: currentJob,
|
||||
download_url: downloadUrl,
|
||||
filename: outputFilename,
|
||||
stored_file_id: storedFileId,
|
||||
input_format,
|
||||
profile,
|
||||
size: exportTaskData?.result?.files?.[0]?.size || 0,
|
||||
};
|
||||
} else if (currentJob.status === 'error') {
|
||||
throw new Error(`Optimize job failed: ${currentJob.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
await new Promise(resolve => setTimeout(resolve, 5000));
|
||||
attempts++;
|
||||
}
|
||||
|
||||
throw new Error('Optimization did not complete within the timeout period');
|
||||
}
|
||||
|
||||
return {
|
||||
job,
|
||||
input_format,
|
||||
profile,
|
||||
status: 'processing',
|
||||
};
|
||||
} catch (error) {
|
||||
if (error instanceof Error) {
|
||||
throw error;
|
||||
}
|
||||
throw new Error(`File optimization failed: ${String(error)}`);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
import { OAuth2GrantType } from '@activepieces/shared';
|
||||
import { PieceAuth, Property } from '@activepieces/pieces-framework';
|
||||
|
||||
export const cloudconvertAuth = PieceAuth.OAuth2({
|
||||
description: 'Connect your CloudConvert account using OAuth2',
|
||||
authUrl: 'https://cloudconvert.com/oauth/authorize',
|
||||
tokenUrl: 'https://cloudconvert.com/oauth/token',
|
||||
required: true,
|
||||
grantType: OAuth2GrantType.AUTHORIZATION_CODE,
|
||||
scope: ['task.read', 'task.write'],
|
||||
props: {
|
||||
region: Property.StaticDropdown({
|
||||
displayName: 'Region',
|
||||
description: 'CloudConvert processing region',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto (Nearest)', value: 'auto' },
|
||||
{ label: 'EU Central (Germany)', value: 'eu-central' },
|
||||
{ label: 'US East (Virginia)', value: 'us-east' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'auto'
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,379 @@
|
||||
import { httpClient, HttpMethod, AuthenticationType } from '@activepieces/pieces-common';
|
||||
|
||||
export class CloudConvertClient {
|
||||
private readonly auth: any;
|
||||
private readonly baseUrl: string;
|
||||
|
||||
constructor(auth: any) {
|
||||
this.auth = auth;
|
||||
|
||||
const region = auth.region || 'auto';
|
||||
switch (region) {
|
||||
case 'eu-central':
|
||||
this.baseUrl = 'https://eu-central.api.cloudconvert.com/v2';
|
||||
break;
|
||||
case 'us-east':
|
||||
this.baseUrl = 'https://us-east.api.cloudconvert.com/v2';
|
||||
break;
|
||||
default:
|
||||
this.baseUrl = 'https://api.cloudconvert.com/v2';
|
||||
}
|
||||
}
|
||||
|
||||
async apiCall({
|
||||
method,
|
||||
resourceUri,
|
||||
body = undefined,
|
||||
queryParams = undefined,
|
||||
}: {
|
||||
method: HttpMethod;
|
||||
resourceUri: string;
|
||||
body?: any;
|
||||
queryParams?: Record<string, string>;
|
||||
}) {
|
||||
// OAuth2 authentication
|
||||
const authConfig = {
|
||||
type: AuthenticationType.BEARER_TOKEN as const,
|
||||
token: this.auth.access_token,
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: method,
|
||||
url: `${this.baseUrl}${resourceUri}`,
|
||||
body,
|
||||
queryParams,
|
||||
authentication: authConfig
|
||||
});
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
async createImportTask(fileUrl: string, filename?: string) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/import/url',
|
||||
body: {
|
||||
url: fileUrl,
|
||||
...(filename && { filename })
|
||||
}
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create import task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createUploadTask(filename: string) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/import/upload',
|
||||
body: {
|
||||
filename
|
||||
}
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create upload task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createImportBase64Task(fileContent: string, filename: string) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/import/base64',
|
||||
body: {
|
||||
file: fileContent,
|
||||
filename
|
||||
}
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create base64 import task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createArchiveTask(input: string | string[], outputFormat: string, options?: {
|
||||
filename?: string;
|
||||
engine?: string;
|
||||
engineVersion?: string;
|
||||
timeout?: number;
|
||||
}) {
|
||||
const body: any = {
|
||||
input: Array.isArray(input) && input.length === 1 ? input[0] : input,
|
||||
output_format: outputFormat,
|
||||
};
|
||||
|
||||
if (options?.filename) {
|
||||
body.filename = options.filename;
|
||||
}
|
||||
if (options?.engine) {
|
||||
body.engine = options.engine;
|
||||
if (options.engineVersion) {
|
||||
body.engine_version = options.engineVersion;
|
||||
}
|
||||
}
|
||||
if (options?.timeout) {
|
||||
body.timeout = options.timeout;
|
||||
}
|
||||
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/archive',
|
||||
body
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create archive task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createCaptureTask(options: {
|
||||
url: string;
|
||||
output_format: string;
|
||||
pages?: string;
|
||||
zoom?: number;
|
||||
page_width?: number;
|
||||
page_height?: number;
|
||||
page_format?: string;
|
||||
page_orientation?: string;
|
||||
margin_top?: number;
|
||||
margin_bottom?: number;
|
||||
margin_left?: number;
|
||||
margin_right?: number;
|
||||
print_background?: boolean;
|
||||
display_header_footer?: boolean;
|
||||
header_template?: string;
|
||||
footer_template?: string;
|
||||
wait_until?: string;
|
||||
wait_for_element?: string;
|
||||
wait_time?: number;
|
||||
css_media_type?: string;
|
||||
filename?: string;
|
||||
engine?: string;
|
||||
engine_version?: string;
|
||||
timeout?: number;
|
||||
}) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/capture-website',
|
||||
body: options
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create capture task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createConvertTask(options: {
|
||||
input: string | string[];
|
||||
input_format?: string;
|
||||
output_format: string;
|
||||
filename?: string;
|
||||
engine?: string;
|
||||
engine_version?: string;
|
||||
timeout?: number;
|
||||
[key: string]: any;
|
||||
}) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/convert',
|
||||
body: options
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create convert task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createMergeTask(options: {
|
||||
input: string | string[];
|
||||
output_format: string;
|
||||
filename?: string;
|
||||
engine?: string;
|
||||
engine_version?: string;
|
||||
timeout?: number;
|
||||
[key: string]: any;
|
||||
}) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/merge',
|
||||
body: options
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create merge task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createOptimizeTask(options: {
|
||||
input: string | string[];
|
||||
input_format?: string;
|
||||
profile?: string;
|
||||
flatten_signatures?: boolean;
|
||||
colorspace?: string;
|
||||
filename?: string;
|
||||
engine?: string;
|
||||
engine_version?: string;
|
||||
timeout?: number;
|
||||
[key: string]: any;
|
||||
}) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/optimize',
|
||||
body: options
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create optimize task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createExportTask(inputTaskId: string) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/export/url',
|
||||
body: {
|
||||
input: inputTaskId
|
||||
}
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create export task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async createJob(tasks: Record<string, any>, tag?: string) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.POST,
|
||||
resourceUri: '/jobs',
|
||||
body: {
|
||||
tasks,
|
||||
...(tag && { tag })
|
||||
}
|
||||
});
|
||||
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to create job: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async getJob(jobId: string) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/jobs/${jobId}`
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to get job: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async getTask(taskId: string, queryParams?: Record<string, string>) {
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: `/tasks/${taskId}`,
|
||||
queryParams
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to get task: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data;
|
||||
}
|
||||
|
||||
async getSupportedFormats(options?: {
|
||||
inputFormat?: string;
|
||||
outputFormat?: string;
|
||||
engine?: string;
|
||||
include?: string[];
|
||||
}) {
|
||||
const queryParams: Record<string, string> = {};
|
||||
|
||||
if (options?.inputFormat) {
|
||||
queryParams['filter[input_format]'] = options.inputFormat;
|
||||
}
|
||||
if (options?.outputFormat) {
|
||||
queryParams['filter[output_format]'] = options.outputFormat;
|
||||
}
|
||||
if (options?.engine) {
|
||||
queryParams['filter[engine]'] = options.engine;
|
||||
}
|
||||
if (options?.include) {
|
||||
queryParams['include'] = options.include.join(',');
|
||||
}
|
||||
|
||||
const response = await this.apiCall({
|
||||
method: HttpMethod.GET,
|
||||
resourceUri: '/convert/formats',
|
||||
queryParams
|
||||
});
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(`Failed to get supported formats: HTTP ${response.status} - ${response.body?.message || 'Unknown error'}`);
|
||||
}
|
||||
|
||||
return response.body.data || [];
|
||||
}
|
||||
}
|
||||
|
||||
export const cloudconvertCommon = {
|
||||
baseUrl: (region = 'auto') => {
|
||||
switch (region) {
|
||||
case 'eu-central':
|
||||
return 'https://eu-central.api.cloudconvert.com/v2';
|
||||
case 'us-east':
|
||||
return 'https://us-east.api.cloudconvert.com/v2';
|
||||
default:
|
||||
return 'https://api.cloudconvert.com/v2';
|
||||
}
|
||||
},
|
||||
|
||||
createClient(auth: any) {
|
||||
return new CloudConvertClient(auth);
|
||||
},
|
||||
|
||||
async apiCall({
|
||||
auth,
|
||||
method,
|
||||
resourceUri,
|
||||
body = undefined,
|
||||
queryParams = undefined,
|
||||
}: {
|
||||
auth: any;
|
||||
method: HttpMethod;
|
||||
resourceUri: string;
|
||||
body?: any;
|
||||
queryParams?: Record<string, string>;
|
||||
}) {
|
||||
const client = new CloudConvertClient(auth);
|
||||
return await client.apiCall({
|
||||
method,
|
||||
resourceUri,
|
||||
body,
|
||||
queryParams
|
||||
});
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,26 @@
|
||||
import { CloudConvertClient } from './client';
|
||||
|
||||
export { cloudconvertAuth } from './auth';
|
||||
|
||||
export { CloudConvertClient } from './client';
|
||||
|
||||
export { convertFileProps } from './properties';
|
||||
|
||||
export { convertFileSchema, captureWebsiteSchema, mergePdfSchema, downloadFileSchema, archiveFileSchema, optimizeFileSchema } from './schemas';
|
||||
|
||||
export const cloudconvertCommon = {
|
||||
baseUrl: (region = 'auto') => {
|
||||
switch (region) {
|
||||
case 'eu-central':
|
||||
return 'https://eu-central.api.cloudconvert.com/v2';
|
||||
case 'us-east':
|
||||
return 'https://us-east.api.cloudconvert.com/v2';
|
||||
default:
|
||||
return 'https://api.cloudconvert.com/v2';
|
||||
}
|
||||
},
|
||||
|
||||
createClient(auth: any) {
|
||||
return new CloudConvertClient(auth);
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,200 @@
|
||||
import { Property } from '@activepieces/pieces-framework';
|
||||
import { CloudConvertClient } from './client';
|
||||
import { cloudconvertAuth } from './auth';
|
||||
|
||||
const outputFormatDropdown = () =>
|
||||
Property.Dropdown({
|
||||
displayName: 'Output Format',
|
||||
description: 'The target format to convert to',
|
||||
required: true,
|
||||
refreshers: ['auth'],
|
||||
auth: cloudconvertAuth,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your CloudConvert account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const client = new CloudConvertClient(auth.props);
|
||||
const formats = await client.getSupportedFormats();
|
||||
|
||||
if (formats.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'No supported formats found',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const formatGroups: { [key: string]: Array<{ label: string; value: string }> } = {};
|
||||
|
||||
formats.forEach((format: any) => {
|
||||
const group = format.meta?.group || 'Other';
|
||||
if (!formatGroups[group]) {
|
||||
formatGroups[group] = [];
|
||||
}
|
||||
formatGroups[group].push({
|
||||
label: format.output_format.toUpperCase(),
|
||||
value: format.output_format,
|
||||
});
|
||||
});
|
||||
|
||||
const popularFormats = ['pdf', 'docx', 'jpg', 'png', 'mp4', 'mp3'];
|
||||
const options: Array<{ label: string; value: string }> = [];
|
||||
|
||||
popularFormats.forEach(format => {
|
||||
const formatOption = formats.find((f: any) => f.output_format === format);
|
||||
if (formatOption) {
|
||||
options.push({
|
||||
label: formatOption.output_format.toUpperCase(),
|
||||
value: formatOption.output_format,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
formats.forEach((format: any) => {
|
||||
if (!popularFormats.includes(format.output_format)) {
|
||||
options.push({
|
||||
label: format.output_format.toUpperCase(),
|
||||
value: format.output_format,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
options: options.slice(0, 50),
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Error loading formats - please try again',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
|
||||
const engineDropdown = ({ required = false }: { required?: boolean }) =>
|
||||
Property.Dropdown({
|
||||
auth: cloudconvertAuth,
|
||||
displayName: 'Engine',
|
||||
description: 'Use a specific engine for the conversion',
|
||||
required,
|
||||
refreshers: ['auth'],
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your CloudConvert account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const engines = [
|
||||
{ label: 'LibreOffice (Default)', value: 'libreoffice' },
|
||||
{ label: 'Microsoft Office', value: 'office' },
|
||||
{ label: 'OnlyOffice', value: 'onlyoffice' },
|
||||
{ label: 'Chrome/Puppeteer', value: 'chrome' },
|
||||
{ label: 'ImageMagick', value: 'imagemagick' },
|
||||
{ label: 'Poppler', value: 'poppler' },
|
||||
{ label: 'GraphicsMagick', value: 'graphicsmagick' },
|
||||
{ label: 'FFmpeg', value: 'ffmpeg' },
|
||||
{ label: 'Calibre', value: 'calibre' },
|
||||
{ label: 'Pandoc', value: 'pandoc' },
|
||||
{ label: '3-Heights', value: '3heights' },
|
||||
{ label: 'PDFTron', value: 'pdftron' },
|
||||
{ label: 'MuPDF', value: 'mupdf' },
|
||||
{ label: 'Inkscape', value: 'inkscape' },
|
||||
];
|
||||
|
||||
return {
|
||||
options: engines,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const convertFileProps = () => ({
|
||||
import_method: Property.StaticDropdown({
|
||||
displayName: 'Import Method',
|
||||
description: 'How to import the file for conversion',
|
||||
required: true,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'File Upload', value: 'upload' },
|
||||
{ label: 'File URL', value: 'url' },
|
||||
{ label: 'Stored File ID', value: 'stored_file' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'upload'
|
||||
}),
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'File to upload and convert (select from your device)',
|
||||
required: false,
|
||||
}),
|
||||
url: Property.ShortText({
|
||||
displayName: 'File URL',
|
||||
description: 'URL of the file to convert',
|
||||
required: false,
|
||||
}),
|
||||
stored_file_id: Property.ShortText({
|
||||
displayName: 'Stored File ID',
|
||||
description: 'ID of a previously stored file in Activepieces to convert',
|
||||
required: false,
|
||||
}),
|
||||
input_format: Property.StaticDropdown({
|
||||
displayName: 'Input Format',
|
||||
description: 'The format of the input file. Leave as "Auto-detect" to let CloudConvert detect automatically',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Auto-detect', value: 'auto' },
|
||||
{ label: 'PDF', value: 'pdf' },
|
||||
{ label: 'DOCX', value: 'docx' },
|
||||
{ label: 'DOC', value: 'doc' },
|
||||
{ label: 'TXT', value: 'txt' },
|
||||
{ label: 'JPG', value: 'jpg' },
|
||||
{ label: 'PNG', value: 'png' },
|
||||
{ label: 'HTML', value: 'html' },
|
||||
{ label: 'Other', value: 'other' },
|
||||
]
|
||||
},
|
||||
defaultValue: 'auto'
|
||||
}),
|
||||
output_format: outputFormatDropdown(),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Output Filename',
|
||||
description: 'Choose a filename (including extension) for the output file',
|
||||
required: false,
|
||||
defaultValue: 'converted-file'
|
||||
}),
|
||||
engine: engineDropdown({ required: false }),
|
||||
engine_version: Property.ShortText({
|
||||
displayName: 'Engine Version',
|
||||
description: 'Use a specific engine version for the conversion',
|
||||
required: false,
|
||||
}),
|
||||
timeout: Property.Number({
|
||||
displayName: 'Timeout (seconds)',
|
||||
description: 'Timeout in seconds after which the task will be cancelled',
|
||||
required: false,
|
||||
}),
|
||||
wait_for_completion: Property.Checkbox({
|
||||
displayName: 'Wait for Completion',
|
||||
description: 'Wait for the conversion to complete before returning',
|
||||
required: true,
|
||||
defaultValue: true,
|
||||
}),
|
||||
store_file: Property.Checkbox({
|
||||
displayName: 'Store File',
|
||||
description: 'Download and store the converted file in Activepieces',
|
||||
required: false,
|
||||
defaultValue: true,
|
||||
}),
|
||||
});
|
||||
@@ -0,0 +1,171 @@
|
||||
import z from 'zod';
|
||||
|
||||
export const convertFileSchema = z.object({
|
||||
import_method: z.enum(['upload', 'url', 'stored_file']),
|
||||
file: z.object({
|
||||
base64: z.string(),
|
||||
filename: z.string().optional(),
|
||||
extension: z.string().optional(),
|
||||
}).nullable().optional(),
|
||||
url: z.string().url().nullable().optional(),
|
||||
stored_file_id: z.string().nullable().optional(),
|
||||
input_format: z.string().nullable().optional().refine((val) => !val || val === 'auto' || val.length > 0, {
|
||||
message: "Input format must be either 'auto' or a valid format"
|
||||
}),
|
||||
output_format: z.string().min(1, 'Output format is required'),
|
||||
filename: z.string().nullable().optional(),
|
||||
engine: z.string().nullable().optional(),
|
||||
engine_version: z.string().nullable().optional(),
|
||||
timeout: z.number().positive().nullable().optional(),
|
||||
wait_for_completion: z.boolean().default(true),
|
||||
store_file: z.boolean().default(true),
|
||||
}).refine((data) => {
|
||||
if (data.import_method === 'upload') {
|
||||
return data.file && data.file.base64;
|
||||
} else if (data.import_method === 'url') {
|
||||
return data.url;
|
||||
} else if (data.import_method === 'stored_file') {
|
||||
return data.stored_file_id;
|
||||
}
|
||||
return false;
|
||||
}, {
|
||||
message: "File is required for upload method, URL is required for URL method, Stored File ID is required for stored file method",
|
||||
path: ["file"]
|
||||
});
|
||||
|
||||
export const captureWebsiteSchema = z.object({
|
||||
url: z.string().url('Valid website URL is required'),
|
||||
output_format: z.string().min(1, 'Output format is required'),
|
||||
pages: z.string().nullable().optional(),
|
||||
zoom: z.number().positive().nullable().optional(),
|
||||
page_width: z.number().positive().nullable().optional(),
|
||||
page_height: z.number().positive().nullable().optional(),
|
||||
page_format: z.string().nullable().optional(),
|
||||
page_orientation: z.string().nullable().optional(),
|
||||
margin_top: z.number().nonnegative().nullable().optional(),
|
||||
margin_bottom: z.number().nonnegative().nullable().optional(),
|
||||
margin_left: z.number().nonnegative().nullable().optional(),
|
||||
margin_right: z.number().nonnegative().nullable().optional(),
|
||||
print_background: z.boolean().nullable().optional(),
|
||||
display_header_footer: z.boolean().nullable().optional(),
|
||||
header_template: z.string().nullable().optional(),
|
||||
footer_template: z.string().nullable().optional(),
|
||||
wait_until: z.string().nullable().optional(),
|
||||
wait_for_element: z.string().nullable().optional(),
|
||||
wait_time: z.number().positive().nullable().optional(),
|
||||
css_media_type: z.string().nullable().optional(),
|
||||
filename: z.string().nullable().optional(),
|
||||
engine: z.string().nullable().optional(),
|
||||
engine_version: z.string().nullable().optional(),
|
||||
timeout: z.number().positive().nullable().optional(),
|
||||
wait_for_completion: z.boolean().default(true),
|
||||
store_file: z.boolean().default(true),
|
||||
});
|
||||
|
||||
export const mergePdfSchema = z.object({
|
||||
import_method: z.enum(['upload', 'url', 'stored_file']),
|
||||
files: z.array(z.object({
|
||||
url: z.string().nullable().optional(),
|
||||
file: z.object({
|
||||
base64: z.string(),
|
||||
filename: z.string().optional(),
|
||||
extension: z.string().optional(),
|
||||
}).nullable().optional(),
|
||||
stored_file_id: z.string().nullable().optional(),
|
||||
filename: z.string().nullable().optional(),
|
||||
})).min(2, 'At least 2 files are required for merging'),
|
||||
filename: z.string().nullable().optional(),
|
||||
engine: z.string().nullable().optional(),
|
||||
engine_version: z.string().nullable().optional(),
|
||||
timeout: z.number().positive().nullable().optional(),
|
||||
wait_for_completion: z.boolean().default(true),
|
||||
store_file: z.boolean().default(true),
|
||||
}).refine((data) => {
|
||||
return data.files.every(fileItem => {
|
||||
if (data.import_method === 'upload') {
|
||||
return fileItem.file && fileItem.file.base64;
|
||||
} else if (data.import_method === 'url') {
|
||||
return fileItem.url;
|
||||
} else if (data.import_method === 'stored_file') {
|
||||
return fileItem.stored_file_id;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}, {
|
||||
message: "All files must have valid input based on the selected import method",
|
||||
path: ["files"]
|
||||
});
|
||||
|
||||
export const downloadFileSchema = z.object({
|
||||
task_id: z.string().min(1, 'Task ID is required'),
|
||||
include: z.array(z.string()).nullable().optional(),
|
||||
store_file: z.boolean().optional(),
|
||||
});
|
||||
|
||||
export const archiveFileSchema = z.object({
|
||||
import_method: z.enum(['upload', 'url', 'stored_file']),
|
||||
files: z.array(z.object({
|
||||
url: z.string().nullable().optional(),
|
||||
file: z.object({
|
||||
base64: z.string(),
|
||||
filename: z.string().optional(),
|
||||
extension: z.string().optional(),
|
||||
}).nullable().optional(),
|
||||
stored_file_id: z.string().nullable().optional(),
|
||||
filename: z.string().nullable().optional(),
|
||||
})).min(1, 'At least one file is required to create an archive'),
|
||||
output_format: z.string().min(1, 'Output format is required'),
|
||||
filename: z.string().nullable().optional(),
|
||||
engine: z.string().nullable().optional(),
|
||||
engine_version: z.string().nullable().optional(),
|
||||
timeout: z.number().positive().nullable().optional(),
|
||||
wait_for_completion: z.boolean().default(true),
|
||||
store_file: z.boolean().default(true),
|
||||
}).refine((data) => {
|
||||
return data.files.every(fileItem => {
|
||||
if (data.import_method === 'upload') {
|
||||
return fileItem.file && fileItem.file.base64;
|
||||
} else if (data.import_method === 'url') {
|
||||
return fileItem.url;
|
||||
} else if (data.import_method === 'stored_file') {
|
||||
return fileItem.stored_file_id;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}, {
|
||||
message: "All files must have valid input based on the selected import method",
|
||||
path: ["files"]
|
||||
});
|
||||
|
||||
export const optimizeFileSchema = z.object({
|
||||
import_method: z.enum(['upload', 'url', 'stored_file']),
|
||||
file: z.object({
|
||||
base64: z.string(),
|
||||
filename: z.string().optional(),
|
||||
extension: z.string().optional(),
|
||||
}).nullable().optional(),
|
||||
url: z.string().url().nullable().optional(),
|
||||
stored_file_id: z.string().nullable().optional(),
|
||||
input_format: z.string().nullable().optional(),
|
||||
profile: z.string().nullable().optional(),
|
||||
flatten_signatures: z.boolean().nullable().optional(),
|
||||
colorspace: z.string().nullable().optional(),
|
||||
filename: z.string().nullable().optional(),
|
||||
engine: z.string().nullable().optional(),
|
||||
engine_version: z.string().nullable().optional(),
|
||||
timeout: z.number().positive().nullable().optional(),
|
||||
wait_for_completion: z.boolean().default(true),
|
||||
store_file: z.boolean().default(true),
|
||||
}).refine((data) => {
|
||||
if (data.import_method === 'upload') {
|
||||
return data.file && data.file.base64;
|
||||
} else if (data.import_method === 'url') {
|
||||
return data.url;
|
||||
} else if (data.import_method === 'stored_file') {
|
||||
return data.stored_file_id;
|
||||
}
|
||||
return false;
|
||||
}, {
|
||||
message: "File is required for upload method, URL is required for URL method, Stored File ID is required for stored file method",
|
||||
path: ["file"]
|
||||
});
|
||||
@@ -0,0 +1,121 @@
|
||||
import {
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
httpClient,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { cloudconvertAuth, cloudconvertCommon } from '../common';
|
||||
|
||||
export const jobFailed = createTrigger({
|
||||
name: 'job_failed',
|
||||
displayName: 'Job Failed',
|
||||
description: 'Triggers when a CloudConvert job has failed',
|
||||
auth: cloudconvertAuth,
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
sampleData: {
|
||||
event: 'job.failed',
|
||||
job: {
|
||||
id: 'job_123456789',
|
||||
tag: 'example-job',
|
||||
status: 'error',
|
||||
created_at: '2023-12-01T12:00:00Z',
|
||||
started_at: '2023-12-01T12:00:05Z',
|
||||
ended_at: '2023-12-01T12:00:15Z',
|
||||
message: 'Task failed: File conversion error',
|
||||
code: 'CONVERSION_FAILED',
|
||||
tasks: [
|
||||
{
|
||||
id: 'task_123456789',
|
||||
name: 'convert-my-file',
|
||||
operation: 'convert',
|
||||
status: 'error',
|
||||
message: 'File conversion error',
|
||||
code: 'CONVERSION_FAILED',
|
||||
created_at: '2023-12-01T12:00:00Z',
|
||||
started_at: '2023-12-01T12:00:05Z',
|
||||
ended_at: '2023-12-01T12:00:15Z',
|
||||
engine: 'office',
|
||||
engine_version: '2016',
|
||||
result: null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
async test(context) {
|
||||
return [this.sampleData];
|
||||
},
|
||||
|
||||
onEnable: async (context) => {
|
||||
const webhookUrl = context.webhookUrl;
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.POST,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth).props?.['region'] as string || 'auto')}/webhooks`,
|
||||
body: {
|
||||
url: webhookUrl,
|
||||
events: ['job.failed']
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to register webhook. Status: ${response.status}`);
|
||||
}
|
||||
},
|
||||
|
||||
onDisable: async (context) => {
|
||||
const webhookUrl = context.webhookUrl;
|
||||
|
||||
// First, find the webhook by URL
|
||||
const listRequest: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth).props?.['region'] as string || 'auto')}/users/me/webhooks`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const listResponse = await httpClient.sendRequest(listRequest);
|
||||
if (listResponse.status === 200 && listResponse.body.data) {
|
||||
const webhook = listResponse.body.data.find((w: any) => w.url === webhookUrl);
|
||||
if (webhook) {
|
||||
const deleteRequest: HttpRequest = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth).props?.['region'] as string || 'auto')}/webhooks/${webhook.id}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
await httpClient.sendRequest(deleteRequest);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue silently
|
||||
}
|
||||
},
|
||||
|
||||
run: async (context) => {
|
||||
const payload = context.payload.body as any;
|
||||
|
||||
if (payload?.event === 'job.failed' && payload?.job) {
|
||||
return [payload];
|
||||
}
|
||||
|
||||
return [];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,160 @@
|
||||
import {
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
httpClient,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { cloudconvertAuth, cloudconvertCommon } from '../common';
|
||||
|
||||
export const jobFinished = createTrigger({
|
||||
name: 'job_finished',
|
||||
displayName: 'Job Finished',
|
||||
description: 'Triggers when a CloudConvert job has been completed',
|
||||
auth: cloudconvertAuth,
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
sampleData: {
|
||||
event: 'job.finished',
|
||||
job: {
|
||||
id: '6559c281-ed85-4728-80db-414561c631e9',
|
||||
tag: 'myjob-123',
|
||||
status: 'finished',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: '2018-09-19T14:42:58+00:00',
|
||||
ended_at: '2018-09-19T14:43:08+00:00',
|
||||
tasks: [
|
||||
{
|
||||
id: '1f34c1b5-9ee8-4c8c-890f-bf44cda1deb7',
|
||||
name: 'import-my-file',
|
||||
operation: 'import/url',
|
||||
status: 'finished',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: '2018-09-19T14:42:58+00:00',
|
||||
ended_at: '2018-09-19T14:42:59+00:00',
|
||||
result: {
|
||||
files: [
|
||||
{
|
||||
filename: 'input.pdf',
|
||||
size: 10240
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
id: '48c6e72b-cb8e-4ecc-bf3d-ead5477b4741',
|
||||
name: 'convert-my-file',
|
||||
operation: 'convert',
|
||||
status: 'finished',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: '2018-09-19T14:42:59+00:00',
|
||||
ended_at: '2018-09-19T14:43:08+00:00',
|
||||
engine: 'office',
|
||||
engine_version: '2016',
|
||||
result: {
|
||||
files: [
|
||||
{
|
||||
filename: 'output.docx',
|
||||
url: 'https://storage.cloudconvert.com/48c6e72b-cb8e-4ecc-bf3d-ead5477b4741/output.docx',
|
||||
size: 15360
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
id: '36af6f54-1c01-45cc-bcc3-97dd23d2f93d',
|
||||
name: 'export-my-file',
|
||||
operation: 'export/url',
|
||||
status: 'finished',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: '2018-09-19T14:43:08+00:00',
|
||||
ended_at: '2018-09-19T14:43:08+00:00',
|
||||
result: {
|
||||
files: [
|
||||
{
|
||||
filename: 'output.docx',
|
||||
url: 'https://storage.cloudconvert.com/36af6f54-1c01-45cc-bcc3-97dd23d2f93d/output.docx',
|
||||
size: 15360
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
async test(context) {
|
||||
return [this.sampleData];
|
||||
},
|
||||
|
||||
onEnable: async (context) => {
|
||||
const webhookUrl = context.webhookUrl;
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.POST,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth).props?.['region'] as string || 'auto')}/webhooks`,
|
||||
body: {
|
||||
url: webhookUrl,
|
||||
events: ['job.finished']
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to register webhook. Status: ${response.status}`);
|
||||
}
|
||||
},
|
||||
|
||||
onDisable: async (context) => {
|
||||
const webhookUrl = context.webhookUrl;
|
||||
|
||||
// First, find the webhook by URL
|
||||
const listRequest: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth as any).region || 'auto')}/users/me/webhooks`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const listResponse = await httpClient.sendRequest(listRequest);
|
||||
if (listResponse.status === 200 && listResponse.body.data) {
|
||||
const webhook = listResponse.body.data.find((w: any) => w.url === webhookUrl);
|
||||
if (webhook) {
|
||||
const deleteRequest: HttpRequest = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth as any).region || 'auto')}/webhooks/${webhook.id}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
await httpClient.sendRequest(deleteRequest);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue silently
|
||||
}
|
||||
},
|
||||
|
||||
run: async (context) => {
|
||||
const payload = context.payload.body as any;
|
||||
|
||||
if (payload?.event === 'job.finished' && payload?.job) {
|
||||
return [payload];
|
||||
}
|
||||
|
||||
return [];
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,135 @@
|
||||
import {
|
||||
HttpMethod,
|
||||
HttpRequest,
|
||||
httpClient,
|
||||
AuthenticationType,
|
||||
} from '@activepieces/pieces-common';
|
||||
import {
|
||||
TriggerStrategy,
|
||||
createTrigger,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { cloudconvertAuth, cloudconvertCommon } from '../common';
|
||||
|
||||
export const newJob = createTrigger({
|
||||
name: 'new_job',
|
||||
displayName: 'New Job Event',
|
||||
description: 'Triggers when a new job has been created',
|
||||
auth: cloudconvertAuth,
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
props: {},
|
||||
sampleData: {
|
||||
event: 'job.created',
|
||||
job: {
|
||||
id: '6559c281-ed85-4728-80db-414561c631e9',
|
||||
tag: 'myjob-123',
|
||||
status: 'waiting',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: null,
|
||||
ended_at: null,
|
||||
tasks: [
|
||||
{
|
||||
id: '7f110c42-3245-41cf-8555-37087c729ed2',
|
||||
name: 'import-my-file',
|
||||
operation: 'import/s3',
|
||||
status: 'waiting',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: null,
|
||||
ended_at: null
|
||||
},
|
||||
{
|
||||
id: '7a142bd0-fa20-493e-abf5-99cc9b5fd7e9',
|
||||
name: 'convert-my-file',
|
||||
operation: 'convert',
|
||||
status: 'waiting',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: null,
|
||||
ended_at: null,
|
||||
engine: 'office',
|
||||
engine_version: '2016'
|
||||
},
|
||||
{
|
||||
id: '36af6f54-1c01-45cc-bcc3-97dd23d2f93d',
|
||||
name: 'export-my-file',
|
||||
operation: 'export/s3',
|
||||
status: 'waiting',
|
||||
created_at: '2018-09-19T14:42:58+00:00',
|
||||
started_at: null,
|
||||
ended_at: null
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
async test(context) {
|
||||
return [this.sampleData];
|
||||
},
|
||||
|
||||
onEnable: async (context) => {
|
||||
const webhookUrl = context.webhookUrl;
|
||||
|
||||
const request: HttpRequest = {
|
||||
method: HttpMethod.POST,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth).props?.['region'] as string || 'auto')}/webhooks`,
|
||||
body: {
|
||||
url: webhookUrl,
|
||||
events: ['job.created']
|
||||
},
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
};
|
||||
|
||||
const response = await httpClient.sendRequest(request);
|
||||
if (response.status !== 201) {
|
||||
throw new Error(`Failed to register webhook. Status: ${response.status}`);
|
||||
}
|
||||
},
|
||||
|
||||
onDisable: async (context) => {
|
||||
const webhookUrl = context.webhookUrl;
|
||||
|
||||
// First, find the webhook by URL
|
||||
const listRequest: HttpRequest = {
|
||||
method: HttpMethod.GET,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth as any).region || 'auto')}/users/me/webhooks`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const listResponse = await httpClient.sendRequest(listRequest);
|
||||
if (listResponse.status === 200 && listResponse.body.data) {
|
||||
const webhook = listResponse.body.data.find((w: any) => w.url === webhookUrl);
|
||||
if (webhook) {
|
||||
const deleteRequest: HttpRequest = {
|
||||
method: HttpMethod.DELETE,
|
||||
url: `${cloudconvertCommon.baseUrl((context.auth as any).region || 'auto')}/webhooks/${webhook.id}`,
|
||||
authentication: {
|
||||
type: AuthenticationType.BEARER_TOKEN,
|
||||
token: context.auth.access_token,
|
||||
},
|
||||
};
|
||||
await httpClient.sendRequest(deleteRequest);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// Continue silently
|
||||
}
|
||||
},
|
||||
|
||||
run: async (context) => {
|
||||
const payload = context.payload.body as any;
|
||||
|
||||
if (payload?.event === 'job.created' && payload?.job) {
|
||||
return [payload];
|
||||
}
|
||||
|
||||
return [];
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user