diff --git a/packages/pieces/community/pdfcrowd/package.json b/packages/pieces/community/pdfcrowd/package.json index 5d3f5e3ca0b..5acc2dfd009 100644 --- a/packages/pieces/community/pdfcrowd/package.json +++ b/packages/pieces/community/pdfcrowd/package.json @@ -1,6 +1,6 @@ { "name": "@activepieces/piece-pdfcrowd", - "version": "0.0.1", + "version": "0.0.2", "type": "commonjs", "main": "./src/index.js", "types": "./src/index.d.ts", diff --git a/packages/pieces/community/pdfcrowd/src/i18n/de.json b/packages/pieces/community/pdfcrowd/src/i18n/de.json new file mode 100644 index 00000000000..147a12af5cf --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/de.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "Webseiten und HTML mit erweiterten Formatierungsoptionen in PDF umwandeln", + "Username": "Benutzername", + "Your Pdfcrowd username": "Dein Pdfcrowd-Benutzername", + "API Key": "API-Schlüssel", + "Your Pdfcrowd API key": "Dein Pdfcrowd API-Schlüssel", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Deine Pdfcrowd API-Anmeldeinformationen finden Sie unter https://pdfcrowd.com/user/account/", + "Convert URL to PDF": "URL in PDF umwandeln", + "Convert HTML to PDF": "HTML in PDF konvertieren", + "Custom API Call": "Eigener API-Aufruf", + "Convert a web page URL to PDF document": "URL einer Webseite in PDF-Dokument umwandeln", + "Convert HTML content (string) to PDF document": "HTML-Inhalt (String) in PDF-Dokument konvertieren", + "Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen", + "URL": "URL", + "Output Filename": "Dateiname ausgeben", + "Page Size": "Einträge pro Seite", + "Page Width": "Seitenbreite", + "Page Height": "Seitenhöhe", + "Orientation": "Ausrichtung", + "Margin Top": "Rand oben", + "Margin Right": "Rand rechts", + "Margin Bottom": "Rand unten", + "Margin Left": "Rand links", + "Content Viewport Width": "Content-Viewport-Breite", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "Eigenes JavaScript", + "Element To Convert": "Zu konvertierendes Element", + "Header HTML": "Header-HTML", + "Header URL": "Kopfzeile URL", + "Footer HTML": "HTML Fußzeile", + "Footer URL": "Fußzeile URL", + "Page Watermark": "Wasserzeichen der Seite", + "Multipage Watermark": "Mehrseitige Wasserzeichen", + "Page Background": "Hintergrund der Seite", + "Multipage Background": "Mehrseitiger Hintergrund", + "HTML Content": "HTML-Inhalt", + "Method": "Methode", + "Headers": "Kopfzeilen", + "Query Parameters": "Abfrageparameter", + "Body Type": "Körpertyp", + "Body": "Körper", + "Response is Binary ?": "Antwort ist binär?", + "No Error on Failure": "Kein Fehler bei Fehler", + "Timeout (in seconds)": "Timeout (in Sekunden)", + "Follow redirects": "Weiterleitungen folgen", + "The URL of the web page to convert. Must be publicly accessible.": "Die URL der zu konvertierenden Webseite. Muss öffentlich zugänglich sein.", + "The filename for the generated PDF": "Der Dateiname für das generierte PDF", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "Setzen Sie die Ausgabeseitengröße mit Standardformaten (A4, Letter, A3, etc.).", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "Legen Sie benutzerdefinierte Seitenbreite fest (z.B. \"8.27in\", \"210mm\"). Das sichere Maximum ist 200in.", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "Setze benutzerdefinierte Seitenhöhe. Auf \"-1\" für eine einzelne PDF-Seite, die sich auf alle Inhalte ausdehnt.", + "Set the output page orientation.": "Setze die Ausgabeseitenorientierung.", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "Legen Sie das Leerzeichen oben auf der Seite fest (z.B. \"0.4in\", \"10mm\").", + "Control white space on the right edge of the page.": "Kontrollieren Sie den Leerraum am rechten Rand der Seite.", + "Control white space at the bottom of the page.": "Legen Sie den Leerraum unten auf der Seite fest.", + "Control white space on the left edge of the page.": "Legen Sie das Leerzeichen am linken Rand der Seite fest.", + "Set the viewport width for formatting the HTML content.": "Legen Sie die Breite des Viewports für die Formatierung des HTML-Inhalts fest.", + "Apply custom CSS to modify the visual appearance and layout of your content.": "Benutzen Sie benutzerdefiniertes CSS, um das Aussehen und das Layout Ihrer Inhalte zu ändern.", + "Run custom JavaScript after the document is loaded and ready to print.": "Führen Sie benutzerdefiniertes JavaScript aus, nachdem das Dokument geladen und druckbereit ist.", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "Konvertieren Sie nur das angegebene Element mittels CSS-Selektor (z.B. \"#content\", \".article\").", + "HTML content for the page header.": "HTML-Inhalt für den Seitenheader.", + "URL of the page header HTML.": "URL des Kopfzeilen-HTML.", + "HTML content for the page footer.": "HTML-Inhalt für die Fußzeile der Seite.", + "URL of the page footer HTML.": "URL des HTML Seitenfußzeilen.", + "Apply a watermark PDF overlay to every page of the output.": "Wenden Sie ein Wasserzeichen PDF-Overlay auf jede Seite der Ausgabe an.", + "Apply each page of a watermark PDF to corresponding output pages.": "Wenden Sie jede Seite eines Wasserzeichens PDF auf entsprechende Ausgabeseiten an.", + "Apply a background PDF to every page of the output.": "Anwenden Sie eine Hintergrund-PDF auf jede Seite der Ausgabe.", + "Apply each page of a background PDF to corresponding output pages.": "Jede Seite eines Hintergrund-PDF auf entsprechende Ausgabeseiten anwenden.", + "The HTML content to convert to PDF": "HTML-Inhalt zum Konvertieren in PDF", + "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 usw.", + "A0": "A0", + "A1": "A1", + "A2": "A2", + "A3": "A3", + "A4": "A4", + "A5": "A5", + "A6": "A6", + "Letter": "Brief", + "Portrait": "Hochformat", + "Landscape": "Querformat", + "Balanced": "Ausgewogen", + "Small": "Klein", + "Medium": "Mittel", + "Large": "Groß", + "Extra Large": "Extra groß", + "GET": "ERHALTEN", + "POST": "POST", + "PATCH": "PATCH", + "PUT": "PUT", + "DELETE": "LÖSCHEN", + "HEAD": "HEAD", + "None": "Keine", + "JSON": "JSON", + "Form Data": "Formulardaten", + "Raw": "Rohe" +} \ No newline at end of file diff --git a/packages/pieces/community/pdfcrowd/src/i18n/es.json b/packages/pieces/community/pdfcrowd/src/i18n/es.json new file mode 100644 index 00000000000..4397bcc2887 --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/es.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "Convierte páginas web y HTML a PDF con opciones avanzadas de formato", + "Username": "Usuario", + "Your Pdfcrowd username": "Tu nombre de usuario Pdfcrowd", + "API Key": "Clave API", + "Your Pdfcrowd API key": "Tu clave API Pdfcrowd", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Tus credenciales de la API Pdfcrowd. Consígalas en https://pdfcrowd.com/user/account/", + "Convert URL to PDF": "Convertir URL a PDF", + "Convert HTML to PDF": "Convertir HTML a PDF", + "Custom API Call": "Llamada API personalizada", + "Convert a web page URL to PDF document": "Convertir una URL de página web a documento PDF", + "Convert HTML content (string) to PDF document": "Convertir contenido HTML (cadena) a documento PDF", + "Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico", + "URL": "URL", + "Output Filename": "Nombre de archivo de salida", + "Page Size": "Tamaño de página", + "Page Width": "Ancho de página", + "Page Height": "Altura de página", + "Orientation": "Orientación", + "Margin Top": "Margen superior", + "Margin Right": "Margen Derecha", + "Margin Bottom": "Margen Inferior", + "Margin Left": "Margen izquierdo", + "Content Viewport Width": "Ancho de vista de contenido", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "JavaScript personalizado", + "Element To Convert": "Elemento a convertir", + "Header HTML": "Encabezado HTML", + "Header URL": "URL del encabezado", + "Footer HTML": "HTML del pie", + "Footer URL": "URL del pie de página", + "Page Watermark": "Marca de Agua", + "Multipage Watermark": "Marca de Agua Multipágina", + "Page Background": "Fondo de página", + "Multipage Background": "Fondo multipágina", + "HTML Content": "Contenido HTML", + "Method": "Método", + "Headers": "Encabezados", + "Query Parameters": "Parámetros de consulta", + "Body Type": "Tipo de cuerpo", + "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)", + "Follow redirects": "Seguir redirecciones", + "The URL of the web page to convert. Must be publicly accessible.": "La URL de la página web a convertir. Debe ser de acceso público.", + "The filename for the generated PDF": "El nombre del archivo para el PDF generado", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "Ajuste el tamaño de la página de salida usando formatos estándar (A4, Letra, A3, etc.).", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "Establezca el ancho de página personalizado (por ejemplo, \"8.27in\", \"210mm\"). El máximo seguro es de 200in.", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "Establecer altura de página personalizada. Establecer a \"-1\" para un PDF de una sola página que se expande para adaptarse a todo el contenido.", + "Set the output page orientation.": "Ajuste la orientación de página de salida.", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "Controle el espacio en blanco en la parte superior de la página (por ejemplo, \"0.4in\", \"10mm\").", + "Control white space on the right edge of the page.": "Controla el espacio en blanco en el borde derecho de la página.", + "Control white space at the bottom of the page.": "Controla el espacio en blanco en la parte inferior de la página.", + "Control white space on the left edge of the page.": "Controla el espacio en blanco en el borde izquierdo de la página.", + "Set the viewport width for formatting the HTML content.": "Ajuste el ancho de la vista para formatear el contenido HTML.", + "Apply custom CSS to modify the visual appearance and layout of your content.": "Aplica CSS personalizado para modificar la apariencia visual y el diseño de tu contenido.", + "Run custom JavaScript after the document is loaded and ready to print.": "Ejecutar JavaScript personalizado después de cargar el documento y listo para imprimir.", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "Convierte sólo el elemento especificado usando el selector CSS (por ejemplo, \"#content\", \".article\").", + "HTML content for the page header.": "Contenido HTML para el encabezado de la página.", + "URL of the page header HTML.": "URL del encabezado de la página HTML.", + "HTML content for the page footer.": "Contenido HTML para el pie de página de página.", + "URL of the page footer HTML.": "URL del pie de página HTML.", + "Apply a watermark PDF overlay to every page of the output.": "Aplicar una superposición PDF de marca de agua a cada página de la salida.", + "Apply each page of a watermark PDF to corresponding output pages.": "Aplicar cada página de una marca de agua PDF a las páginas de salida correspondientes.", + "Apply a background PDF to every page of the output.": "Aplicar un PDF de fondo a cada página de la salida.", + "Apply each page of a background PDF to corresponding output pages.": "Aplicar cada página de un PDF de fondo a las páginas de salida correspondientes.", + "The HTML content to convert to PDF": "El contenido HTML a convertir a PDF", + "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.", + "A0": "A0", + "A1": "R1", + "A2": "R2", + "A3": "R3", + "A4": "R4", + "A5": "R5", + "A6": "R6", + "Letter": "Letra", + "Portrait": "Retrato", + "Landscape": "Paisaje", + "Balanced": "Equilibrado", + "Small": "Pequeño", + "Medium": "Medio", + "Large": "Grande", + "Extra Large": "Extra grande", + "GET": "RECOGER", + "POST": "POST", + "PATCH": "PATCH", + "PUT": "PUT", + "DELETE": "BORRAR", + "HEAD": "LIMPIO", + "None": "Ninguna", + "JSON": "JSON", + "Form Data": "Datos de Formulario", + "Raw": "Rápido" +} \ No newline at end of file diff --git a/packages/pieces/community/pdfcrowd/src/i18n/fr.json b/packages/pieces/community/pdfcrowd/src/i18n/fr.json new file mode 100644 index 00000000000..48633d3b534 --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/fr.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "Convertir les pages web et HTML en PDF avec des options de mise en forme avancées", + "Username": "Nom d'utilisateur", + "Your Pdfcrowd username": "Votre nom d'utilisateur Pdfcrowd", + "API Key": "Clé API", + "Your Pdfcrowd API key": "Votre clé API Pdfcrowd", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Vos identifiants API Pdfcrowd. Téléchargez-les sur https://pdfcrowd.com/user/account/", + "Convert URL to PDF": "Convertir l'URL en PDF", + "Convert HTML to PDF": "Convertir le HTML en PDF", + "Custom API Call": "Appel d'API personnalisé", + "Convert a web page URL to PDF document": "Convertir l'URL d'une page web en document PDF", + "Convert HTML content (string) to PDF document": "Convertir le contenu HTML (chaîne) en document PDF", + "Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique", + "URL": "URL", + "Output Filename": "Nom du fichier de sortie", + "Page Size": "Nombre d'élément", + "Page Width": "Largeur de la page", + "Page Height": "Hauteur de la page", + "Orientation": "Orientation", + "Margin Top": "Marge en haut", + "Margin Right": "Marge à droite", + "Margin Bottom": "Marge du bas", + "Margin Left": "Marge à gauche", + "Content Viewport Width": "Largeur de la fenêtre de contenu", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "JavaScript personnalisé", + "Element To Convert": "Élément à convertir", + "Header HTML": "En-tête HTML", + "Header URL": "URL de l'en-tête", + "Footer HTML": "Pied de page HTML", + "Footer URL": "URL de pied de page", + "Page Watermark": "Filigrane de page", + "Multipage Watermark": "Filigrane de plusieurs pages", + "Page Background": "Arrière-plan de la page", + "Multipage Background": "Arrière-plan multipage", + "HTML Content": "Contenu HTML", + "Method": "Méthode", + "Headers": "Headers", + "Query Parameters": "Paramètres de requête", + "Body Type": "Body Type", + "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)", + "Follow redirects": "Suivre les redirections", + "The URL of the web page to convert. Must be publicly accessible.": "L'URL de la page web à convertir. Doit être accessible au public.", + "The filename for the generated PDF": "Le nom du fichier pour le PDF généré", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "Définissez la taille de la page de sortie en utilisant des formats standards (A4, Lettre, A3, etc.).", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "Définit la largeur de page personnalisée (par exemple, \"8.27in\", \"210mm\"). Le maximum de sécurité est de 200in.", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "Définissez la hauteur de la page personnalisée. Réglez sur \"-1\" pour un PDF d'une seule page qui s'adapte à tout le contenu.", + "Set the output page orientation.": "Définit l'orientation de la page de sortie.", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "Contrôler les espaces blancs en haut de la page (par exemple, \"0.4in\", \"10mm\").", + "Control white space on the right edge of the page.": "Contrôler l'espace blanc sur le bord droit de la page.", + "Control white space at the bottom of the page.": "Contrôler les espaces en bas de la page.", + "Control white space on the left edge of the page.": "Contrôler les espaces sur le bord gauche de la page.", + "Set the viewport width for formatting the HTML content.": "Définissez la largeur de la fenêtre d'affichage pour la mise en forme du contenu HTML.", + "Apply custom CSS to modify the visual appearance and layout of your content.": "Appliquez des CSS personnalisés pour modifier l'apparence visuelle et la mise en page de votre contenu.", + "Run custom JavaScript after the document is loaded and ready to print.": "Exécutez un JavaScript personnalisé après le chargement du document et prêt à l'impression.", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "Convertit seulement l'élément spécifié en utilisant un sélecteur CSS (par exemple, \"#content\", \".article\").", + "HTML content for the page header.": "Contenu HTML pour l'en-tête de la page.", + "URL of the page header HTML.": "URL de l'en-tête HTML de la page.", + "HTML content for the page footer.": "Contenu HTML pour le pied de page.", + "URL of the page footer HTML.": "URL du pied de page HTML de la page.", + "Apply a watermark PDF overlay to every page of the output.": "Appliquer un filigrane PDF à chaque page de la sortie.", + "Apply each page of a watermark PDF to corresponding output pages.": "Appliquer chaque page d'un filigrane PDF aux pages de sortie correspondantes.", + "Apply a background PDF to every page of the output.": "Appliquer un PDF en arrière-plan à chaque page de la sortie.", + "Apply each page of a background PDF to corresponding output pages.": "Appliquer chaque page d'un PDF en arrière-plan aux pages de sortie correspondantes.", + "The HTML content to convert to PDF": "Le contenu HTML à convertir en PDF", + "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.", + "A0": "A0", + "A1": "A1", + "A2": "A2", + "A3": "A3", + "A4": "A4", + "A5": "A5", + "A6": "A6", + "Letter": "Lettre", + "Portrait": "Portrait", + "Landscape": "Paysage", + "Balanced": "Equilibré", + "Small": "Petit", + "Medium": "Moyenne", + "Large": "Gros", + "Extra Large": "Très grand", + "GET": "GET", + "POST": "POST", + "PATCH": "PATCH", + "PUT": "PUT", + "DELETE": "DELETE", + "HEAD": "HEAD", + "None": "Aucun", + "JSON": "JSON", + "Form Data": "Données du formulaire", + "Raw": "Brut" +} \ No newline at end of file diff --git a/packages/pieces/community/pdfcrowd/src/i18n/ja.json b/packages/pieces/community/pdfcrowd/src/i18n/ja.json new file mode 100644 index 00000000000..9b77be67d5a --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/ja.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "高度な書式設定オプションを使用してWebページとHTMLをPDFに変換します", + "Username": "ユーザー名", + "Your Pdfcrowd username": "Pdfcrowdのユーザー名", + "API Key": "API キー", + "Your Pdfcrowd API key": "Pdfcrowd API キー", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Pdfcrowd API 資格情報。https://pdfcrowd.com/user/account/ で入手できます。", + "Convert URL to PDF": "URLをPDFに変換", + "Convert HTML to PDF": "HTMLをPDFに変換", + "Custom API Call": "カスタムAPI呼び出し", + "Convert a web page URL to PDF document": "Web ページの URL を PDF ドキュメントに変換します", + "Convert HTML content (string) to PDF document": "HTML コンテンツ (文字列) を PDF ドキュメントに変換", + "Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。", + "URL": "URL", + "Output Filename": "出力ファイル名", + "Page Size": "ページサイズ", + "Page Width": "ページ幅", + "Page Height": "ページの高さ", + "Orientation": "方向", + "Margin Top": "上部の証拠金", + "Margin Right": "右マージン(マージン)", + "Margin Bottom": "下揃え", + "Margin Left": "マージン左", + "Content Viewport Width": "コンテンツビューポートの幅", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "カスタム JavaScript", + "Element To Convert": "変換する要素", + "Header HTML": "ヘッダー HTML", + "Header URL": "ヘッダー URL", + "Footer HTML": "フッターHTML", + "Footer URL": "フッターURL", + "Page Watermark": "ページウォーターマーク", + "Multipage Watermark": "複数ページのウォーターマーク", + "Page Background": "ページの背景", + "Multipage Background": "複数ページの背景", + "HTML Content": "HTML コンテンツ", + "Method": "方法", + "Headers": "ヘッダー", + "Query Parameters": "クエリパラメータ", + "Body Type": "ボディタイプ", + "Body": "本文", + "Response is Binary ?": "応答はバイナリですか?", + "No Error on Failure": "失敗時にエラーはありません", + "Timeout (in seconds)": "タイムアウト(秒)", + "Follow redirects": "リダイレクトをフォローする", + "The URL of the web page to convert. Must be publicly accessible.": "変換するWebページのURL。公開されている必要があります。", + "The filename for the generated PDF": "生成されたPDFのファイル名", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "出力ページのサイズを標準フォーマット(A4, Letter, A3など)で設定します。", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "カスタムページの幅を設定します(例:\"8.27in\", \"210mm\")。安全最大値は200インチです。", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "カスタムページの高さを設定します。すべてのコンテンツに合うように展開される単一ページPDFの場合は「-1」に設定します。", + "Set the output page orientation.": "出力ページの向きを設定します。", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "ページ上部の空白を制御します (例: \"0.4in\", \"10mm\")。", + "Control white space on the right edge of the page.": "ページ右端の空白を制御します。", + "Control white space at the bottom of the page.": "ページ下部の空白を制御します。", + "Control white space on the left edge of the page.": "ページの左端にある空白を制御します。", + "Set the viewport width for formatting the HTML content.": "HTML コンテンツを書式設定するためのビューポートの幅を設定します。", + "Apply custom CSS to modify the visual appearance and layout of your content.": "カスタム CSS を適用して、コンテンツの視覚的な外観とレイアウトを変更します。", + "Run custom JavaScript after the document is loaded and ready to print.": "ドキュメントが読み込まれて印刷準備ができたら、カスタム JavaScript を実行します。", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "指定された要素のみをCSSセレクタを使用して変換します (例: \"#content\", \".article\")。", + "HTML content for the page header.": "ページヘッダーの HTML コンテンツ。", + "URL of the page header HTML.": "ページヘッダー HTML の URL です。", + "HTML content for the page footer.": "ページフッターのHTMLコンテンツ。", + "URL of the page footer HTML.": "ページフッターHTMLのURL", + "Apply a watermark PDF overlay to every page of the output.": "出力のすべてのページに透かしPDFオーバーレイを適用します。", + "Apply each page of a watermark PDF to corresponding output pages.": "透かしPDFの各ページを対応する出力ページに適用します。", + "Apply a background PDF to every page of the output.": "出力のすべてのページに背景PDFを適用します。", + "Apply each page of a background PDF to corresponding output pages.": "背景PDFの各ページを対応する出力ページに適用します。", + "The HTML content to convert to PDF": "PDFに変換するHTMLコンテンツ", + "Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。", + "Enable for files like PDFs, images, etc.": "PDF、画像などのファイルを有効にする", + "A0": "A0", + "A1": "A1", + "A2": "A2", + "A3": "A3", + "A4": "A4", + "A5": "A5", + "A6": "A6", + "Letter": "手紙", + "Portrait": "縦向き", + "Landscape": "ランドスケープ", + "Balanced": "バランス", + "Small": "小", + "Medium": "ミディアム", + "Large": "大", + "Extra Large": "特大", + "GET": "GET", + "POST": "POST", + "PATCH": "PATCH", + "PUT": "PUT", + "DELETE": "DELETE", + "HEAD": "HEAD", + "None": "なし", + "JSON": "JSON", + "Form Data": "フォームデータ", + "Raw": "Raw" +} \ No newline at end of file diff --git a/packages/pieces/community/pdfcrowd/src/i18n/nl.json b/packages/pieces/community/pdfcrowd/src/i18n/nl.json new file mode 100644 index 00000000000..8920d573e1e --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/nl.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "Webpagina's en HTML converteren naar PDF met geavanceerde opmaakopties", + "Username": "Gebruikersnaam", + "Your Pdfcrowd username": "Je Pdfcrowd gebruikersnaam", + "API Key": "API Sleutel", + "Your Pdfcrowd API key": "Uw Pdfcrowd API-sleutel", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Uw Pdfcrowd API inloggegevens. Download deze op https://pdfcrowd.com/user/account/", + "Convert URL to PDF": "Converteer URL naar PDF", + "Convert HTML to PDF": "HTML converteren naar PDF", + "Custom API Call": "Custom API Call", + "Convert a web page URL to PDF document": "Converteer een webpagina-URL naar PDF-document", + "Convert HTML content (string) to PDF document": "Converteer HTML-inhoud (string) naar PDF-document", + "Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt", + "URL": "URL", + "Output Filename": "Uitvoer bestandsnaam", + "Page Size": "Paginagrootte", + "Page Width": "Pagina breedte", + "Page Height": "Pagina hoogte", + "Orientation": "Oriëntatie", + "Margin Top": "Marge boven", + "Margin Right": "Rand rechts", + "Margin Bottom": "Marge onder", + "Margin Left": "Rand links", + "Content Viewport Width": "Inhoud Viewport Breedte", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "Aangepaste JavaScript", + "Element To Convert": "Element om te converteren", + "Header HTML": "Koptekst HTML", + "Header URL": "Koptekst URL", + "Footer HTML": "HTML voettekst", + "Footer URL": "Voettekst URL", + "Page Watermark": "Pagina watermerk", + "Multipage Watermark": "Watermerk met meerdere pagina's", + "Page Background": "Pagina achtergrond", + "Multipage Background": "Meervoudige pagina achtergrond", + "HTML Content": "HTML inhoud", + "Method": "Methode", + "Headers": "Kopteksten", + "Query Parameters": "Query parameters", + "Body Type": "Type lichaam", + "Body": "Lichaam", + "Response is Binary ?": "Antwoord is binair?", + "No Error on Failure": "Geen fout bij fout", + "Timeout (in seconds)": "Time-out (in seconden)", + "Follow redirects": "Volg omleidingen", + "The URL of the web page to convert. Must be publicly accessible.": "De URL van de webpagina om te converteren. Moet openbaar toegankelijk zijn.", + "The filename for the generated PDF": "De bestandsnaam voor de gegenereerde PDF", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "Stel de uitvoer pagina grootte in met standaard formaten (A4, Letter, A3, enz.).", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "Stel aangepaste pagina breedte in (bijv. \"8.27in\", \"210mm\"). Het veilige maximum is 200in.", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "Stel de hoogte van een aangepaste pagina in. Stel in op \"-1\" voor een enkele pagina PDF die groter wordt om aan alle inhoud te voldoen.", + "Set the output page orientation.": "Stel de uitvoer pagina oriëntatie in.", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "Bestuur witruimte bovenaan de pagina (bijv. \"0,4in\", \"10mm\").", + "Control white space on the right edge of the page.": "Beheer witte ruimte aan de rechterkant van de pagina.", + "Control white space at the bottom of the page.": "Beheer witte ruimte onderaan de pagina.", + "Control white space on the left edge of the page.": "Beheer witte ruimte aan de linkerkant van de pagina.", + "Set the viewport width for formatting the HTML content.": "Stel de breedte van de viewport in voor het formatteren van de HTML inhoud.", + "Apply custom CSS to modify the visual appearance and layout of your content.": "Pas aangepaste CSS toe om het uiterlijk en de lay-out van uw content te wijzigen.", + "Run custom JavaScript after the document is loaded and ready to print.": "Aangepaste JavaScript uitvoeren nadat het document is geladen en klaar om af te drukken.", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "Alleen het opgegeven element met behulp van CSS-selector converteren (bijv. \"#content\", \".article\").", + "HTML content for the page header.": "HTML inhoud voor de pagina kop.", + "URL of the page header HTML.": "URL van de pagina header HTML.", + "HTML content for the page footer.": "HTML-inhoud voor de voettekst van de pagina.", + "URL of the page footer HTML.": "URL van de footer HTML van de pagina.", + "Apply a watermark PDF overlay to every page of the output.": "Gebruik een watermerk PDF overlay op elke pagina van de uitvoer.", + "Apply each page of a watermark PDF to corresponding output pages.": "Elke pagina van een watermerk PDF toepassen op de bijbehorende uitvoerpagina's.", + "Apply a background PDF to every page of the output.": "Gebruik PDF als achtergrond voor elke pagina van de uitvoer.", + "Apply each page of a background PDF to corresponding output pages.": "Elke pagina van een achtergrond PDF gebruiken op de bijbehorende uitvoerpagina's.", + "The HTML content to convert to PDF": "De HTML-inhoud om te converteren naar PDF", + "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.", + "A0": "A0", + "A1": "A1", + "A2": "A2", + "A3": "A3", + "A4": "A4", + "A5": "A5", + "A6": "A6", + "Letter": "Brief", + "Portrait": "Staand", + "Landscape": "Liggend", + "Balanced": "Evenwichtig", + "Small": "Klein", + "Medium": "Middelgroot", + "Large": "groot", + "Extra Large": "Extra groot", + "GET": "KRIJG", + "POST": "POSTE", + "PATCH": "BEKIJK", + "PUT": "PUT", + "DELETE": "VERWIJDEREN", + "HEAD": "HOOFD", + "None": "geen", + "JSON": "JSON", + "Form Data": "Formulieren gegevens", + "Raw": "Onbewerkte" +} \ No newline at end of file diff --git a/packages/pieces/community/pdfcrowd/src/i18n/pt.json b/packages/pieces/community/pdfcrowd/src/i18n/pt.json new file mode 100644 index 00000000000..b7e0f44a6d0 --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/pt.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "Converta páginas da web e HTML para PDF com opções avançadas de formatação", + "Username": "Usuário:", + "Your Pdfcrowd username": "Seu nome de usuário do Pdfcrowd", + "API Key": "Chave de API", + "Your Pdfcrowd API key": "Sua chave de API Pdfcrowd", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Suas credenciais de API Pdfcrowd. Obtenha-as em https://pdfcrowd.com/user/account/", + "Convert URL to PDF": "Converter URL para PDF", + "Convert HTML to PDF": "Converter HTML para PDF", + "Custom API Call": "Chamada de API personalizada", + "Convert a web page URL to PDF document": "Converter o URL da página web para PDF", + "Convert HTML content (string) to PDF document": "Converter conteúdo HTML (string) para o documento PDF", + "Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico", + "URL": "URL:", + "Output Filename": "Nome do arquivo de saída", + "Page Size": "Tamanho da página", + "Page Width": "Largura de Página", + "Page Height": "Altura da Página", + "Orientation": "Orientação", + "Margin Top": "Margem superior", + "Margin Right": "Margem Direita", + "Margin Bottom": "Margem inferior", + "Margin Left": "Margem Esquerda", + "Content Viewport Width": "Largura do conteúdo visualizado", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "JavaScript Personalizado", + "Element To Convert": "Elemento para Converter", + "Header HTML": "HTML de cabeçalho", + "Header URL": "URL do Cabeçalho", + "Footer HTML": "HTML do Rodapé", + "Footer URL": "URL do Rodapé", + "Page Watermark": "Marca d'água da página", + "Multipage Watermark": "Marca d'água multi-página", + "Page Background": "Fundo da Página", + "Multipage Background": "Fundo Multipágina", + "HTML Content": "Conteúdo HTML", + "Method": "Método", + "Headers": "Cabeçalhos", + "Query Parameters": "Parâmetros da consulta", + "Body Type": "Tipo de Corpo", + "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)", + "Follow redirects": "Seguir redirecionamentos", + "The URL of the web page to convert. Must be publicly accessible.": "O URL da página para conversão. Deve ser acessível ao público.", + "The filename for the generated PDF": "O nome do arquivo para PDF gerado", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "Definir o tamanho da página de saída usando formatos padrão (A4, Letter, A3, etc.).", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "Definir largura da página personalizada (por exemplo, \"8.27in\", \"210mm\"). O máximo seguro é 200in.", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "Definir altura da página personalizada. Definir como \\\"-1\\\" para PDF de uma única página que expanda para que todo o conteúdo se encaixe.", + "Set the output page orientation.": "Definir a orientação da página de saída.", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "Controlar espaço em branco no topo da página (por exemplo, \"0.4in\", \"10mm\").", + "Control white space on the right edge of the page.": "Controle o espaço em branco na borda direita da página.", + "Control white space at the bottom of the page.": "Controle espaço em branco no final da página.", + "Control white space on the left edge of the page.": "Controle o espaço em branco na borda esquerda da página.", + "Set the viewport width for formatting the HTML content.": "Defina a largura do visor para formatar o conteúdo HTML.", + "Apply custom CSS to modify the visual appearance and layout of your content.": "Aplique o CSS personalizado para modificar a aparência visual e o layout do seu conteúdo.", + "Run custom JavaScript after the document is loaded and ready to print.": "Executar JavaScript personalizado após o documento ser carregado e pronto para imprimir.", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "Converter apenas o elemento especificado usando seletor CSS (por exemplo, \"#content\", \".article\").", + "HTML content for the page header.": "Conteúdo HTML para o cabeçalho da página.", + "URL of the page header HTML.": "URL do HTML do cabeçalho da página.", + "HTML content for the page footer.": "Conteúdo HTML para o rodapé da página.", + "URL of the page footer HTML.": "URL do HTML do rodapé da página.", + "Apply a watermark PDF overlay to every page of the output.": "Aplicar uma sobreposição de marca d'água em todas as páginas da saída.", + "Apply each page of a watermark PDF to corresponding output pages.": "Aplica cada página de um PDF de marca d'água às páginas de saída correspondentes.", + "Apply a background PDF to every page of the output.": "Aplica um PDF em segundo plano a cada página da saída.", + "Apply each page of a background PDF to corresponding output pages.": "Aplicar cada página de um PDF em segundo plano às páginas de saída correspondentes.", + "The HTML content to convert to PDF": "O conteúdo HTML a ser convertido para PDF", + "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.", + "A0": "A0", + "A1": "A1", + "A2": "A2", + "A3": "A3", + "A4": "A4", + "A5": "A5", + "A6": "A6", + "Letter": "Letra", + "Portrait": "Retrato", + "Landscape": "Paisagem", + "Balanced": "Equilibrado", + "Small": "Pequeno", + "Medium": "Média", + "Large": "grande", + "Extra Large": "Extra grande", + "GET": "OBTER", + "POST": "POSTAR", + "PATCH": "COMPRAR", + "PUT": "COLOCAR", + "DELETE": "EXCLUIR", + "HEAD": "CABEÇA", + "None": "Nenhuma", + "JSON": "JSON", + "Form Data": "Dados de Formulário", + "Raw": "RAW" +} \ No newline at end of file diff --git a/packages/pieces/community/pdfcrowd/src/i18n/zh.json b/packages/pieces/community/pdfcrowd/src/i18n/zh.json new file mode 100644 index 00000000000..5a5dacf6639 --- /dev/null +++ b/packages/pieces/community/pdfcrowd/src/i18n/zh.json @@ -0,0 +1,96 @@ +{ + "Convert web pages and HTML to PDF with advanced formatting options": "Convert web pages and HTML to PDF with advanced formatting options", + "Username": "用户名", + "Your Pdfcrowd username": "Your Pdfcrowd username", + "API Key": "API 密钥", + "Your Pdfcrowd API key": "Your Pdfcrowd API key", + "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/": "Your Pdfcrowd API credentials. Get them at https://pdfcrowd.com/user/account/", + "Convert URL to PDF": "Convert URL to PDF", + "Convert HTML to PDF": "Convert HTML to PDF", + "Custom API Call": "自定义 API 呼叫", + "Convert a web page URL to PDF document": "Convert a web page URL to PDF document", + "Convert HTML content (string) to PDF document": "Convert HTML content (string) to PDF document", + "Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点", + "URL": "URL", + "Output Filename": "Output Filename", + "Page Size": "Page Size", + "Page Width": "Page Width", + "Page Height": "Page Height", + "Orientation": "Orientation", + "Margin Top": "Margin Top", + "Margin Right": "Margin Right", + "Margin Bottom": "Margin Bottom", + "Margin Left": "Margin Left", + "Content Viewport Width": "Content Viewport Width", + "Custom CSS": "Custom CSS", + "Custom JavaScript": "Custom JavaScript", + "Element To Convert": "Element To Convert", + "Header HTML": "Header HTML", + "Header URL": "Header URL", + "Footer HTML": "Footer HTML", + "Footer URL": "Footer URL", + "Page Watermark": "Page Watermark", + "Multipage Watermark": "Multipage Watermark", + "Page Background": "Page Background", + "Multipage Background": "Multipage Background", + "HTML Content": "HTML Content", + "Method": "方法", + "Headers": "信头", + "Query Parameters": "查询参数", + "Body Type": "Body Type", + "Body": "正文内容", + "Response is Binary ?": "Response is Binary ?", + "No Error on Failure": "失败时没有错误", + "Timeout (in seconds)": "超时(秒)", + "Follow redirects": "Follow redirects", + "The URL of the web page to convert. Must be publicly accessible.": "The URL of the web page to convert. Must be publicly accessible.", + "The filename for the generated PDF": "The filename for the generated PDF", + "Set the output page size using standard formats (A4, Letter, A3, etc.).": "Set the output page size using standard formats (A4, Letter, A3, etc.).", + "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.": "Set custom page width (e.g., \"8.27in\", \"210mm\"). The safe maximum is 200in.", + "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.": "Set custom page height. Set to \"-1\" for a single-page PDF that expands to fit all content.", + "Set the output page orientation.": "Set the output page orientation.", + "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").": "Control white space at the top of the page (e.g., \"0.4in\", \"10mm\").", + "Control white space on the right edge of the page.": "Control white space on the right edge of the page.", + "Control white space at the bottom of the page.": "Control white space at the bottom of the page.", + "Control white space on the left edge of the page.": "Control white space on the left edge of the page.", + "Set the viewport width for formatting the HTML content.": "Set the viewport width for formatting the HTML content.", + "Apply custom CSS to modify the visual appearance and layout of your content.": "Apply custom CSS to modify the visual appearance and layout of your content.", + "Run custom JavaScript after the document is loaded and ready to print.": "Run custom JavaScript after the document is loaded and ready to print.", + "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").": "Convert only the specified element using CSS selector (e.g., \"#content\", \".article\").", + "HTML content for the page header.": "HTML content for the page header.", + "URL of the page header HTML.": "URL of the page header HTML.", + "HTML content for the page footer.": "HTML content for the page footer.", + "URL of the page footer HTML.": "URL of the page footer HTML.", + "Apply a watermark PDF overlay to every page of the output.": "Apply a watermark PDF overlay to every page of the output.", + "Apply each page of a watermark PDF to corresponding output pages.": "Apply each page of a watermark PDF to corresponding output pages.", + "Apply a background PDF to every page of the output.": "Apply a background PDF to every page of the output.", + "Apply each page of a background PDF to corresponding output pages.": "Apply each page of a background PDF to corresponding output pages.", + "The HTML content to convert to PDF": "The HTML content to convert to PDF", + "Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。", + "Enable for files like PDFs, images, etc.": "Enable for files like PDFs, images, etc.", + "A0": "A0", + "A1": "A1", + "A2": "A2", + "A3": "A3", + "A4": "A4", + "A5": "A5", + "A6": "A6", + "Letter": "Letter", + "Portrait": "Portrait", + "Landscape": "Landscape", + "Balanced": "Balanced", + "Small": "Small", + "Medium": "Medium", + "Large": "Large", + "Extra Large": "Extra Large", + "GET": "获取", + "POST": "帖子", + "PATCH": "PATCH", + "PUT": "弹出", + "DELETE": "删除", + "HEAD": "黑色", + "None": "无", + "JSON": "JSON", + "Form Data": "表单数据", + "Raw": "原始文件" +} \ No newline at end of file diff --git a/packages/pieces/community/salesforce/package.json b/packages/pieces/community/salesforce/package.json index 3e63207d5a3..bbe46c49d5e 100644 --- a/packages/pieces/community/salesforce/package.json +++ b/packages/pieces/community/salesforce/package.json @@ -1,4 +1,4 @@ { "name": "@activepieces/piece-salesforce", - "version": "0.3.4" + "version": "0.4.0" } diff --git a/packages/pieces/community/salesforce/src/lib/action/run-report.ts b/packages/pieces/community/salesforce/src/lib/action/run-report.ts index fedca68d103..78295bf83d9 100644 --- a/packages/pieces/community/salesforce/src/lib/action/run-report.ts +++ b/packages/pieces/community/salesforce/src/lib/action/run-report.ts @@ -4,44 +4,214 @@ import { salesforceAuth } from '../..'; import { callSalesforceApi, salesforcesCommon } from '../common'; export const runReport = createAction({ - auth: salesforceAuth, - name: 'run_report', - displayName: 'Run Report', - description: 'Execute a Salesforce analytics report.', - props: { - report_id: salesforcesCommon.report, - filters: Property.Json({ - displayName: 'Filters', - description: 'Apply dynamic filters to the report run.', - required: false, - defaultValue: [ - { - "column": "ACCOUNT.NAME", - "operator": "equals", - "value": "Acme" - } - ] - }) - }, - async run(context) { - const { report_id, filters } = context.propsValue; - - let body = undefined; - if (filters && Array.isArray(filters) && filters.length > 0) { - body = { - reportMetadata: { - reportFilters: filters, - }, - }; + auth: salesforceAuth, + name: 'run_report', + displayName: 'Run Report', + description: + 'Execute a Salesforce analytics report and return the results as easy-to-use rows.', + props: { + report_id: salesforcesCommon.report, + filters: Property.Json({ + displayName: 'Filters', + description: + "Apply dynamic filters to the report run. Leave empty to use the report's saved filters.", + required: false, + defaultValue: [], + }), + }, + async run(context) { + const { report_id, filters } = context.propsValue; + + let body = undefined; + if (filters && Array.isArray(filters) && filters.length > 0) { + body = { + reportMetadata: { + reportFilters: filters, + }, + }; + } + + const queryParam = '?includeDetails=true'; + + const response = await callSalesforceApi( + HttpMethod.POST, + context.auth, + `/services/data/v56.0/analytics/reports/${report_id}${queryParam}`, + body + ); + + const reportData = response.body; + + return transformReportToRows(reportData); + }, +}); + +interface SalesforceReportResponse { + attributes: { + reportId: string; + reportName: string; + }; + reportMetadata: { + detailColumns: string[]; + name: string; + reportFormat: string; + aggregates: string[]; + groupingsDown: { + name: string; + sortOrder: string; + dateGranularity: string; + column: string; + }[]; + }; + reportExtendedMetadata: { + detailColumnInfo: Record; + groupingColumnInfo: Record; + aggregateColumnInfo: Record; + }; + factMap: Record< + string, + { + rows: { dataCells: { label: string; value: unknown }[] }[]; + aggregates: { label: string; value: unknown }[]; + } + >; + groupingsDown: { + groupings: { key: string; label: string; value: unknown }[]; + }; +} + +function transformReportToRows(report: SalesforceReportResponse): { + reportName: string; + reportId: string; + totalRows: number; + columns: string[]; + rows: Record[]; +} { + const detailColumns = report.reportMetadata?.detailColumns ?? []; + const detailColumnInfo = + report.reportExtendedMetadata?.detailColumnInfo ?? {}; + const groupingsDown = report.reportMetadata?.groupingsDown ?? []; + const groupingColumnInfo = + report.reportExtendedMetadata?.groupingColumnInfo ?? {}; + const factMap = report.factMap ?? {}; + + // Build ordered list of column labels for detail columns + const columnLabels = detailColumns.map( + (col) => detailColumnInfo[col]?.label ?? col + ); + + // Build grouping column labels + const groupingLabels = groupingsDown.map( + (g) => groupingColumnInfo[g.name]?.label ?? g.name + ); + + const allRows: Record[] = []; + + // Collect grouping labels from groupingsDown for grouped/summary reports + const groupingValues = extractGroupingValues( + report.groupingsDown?.groupings ?? [] + ); + + // Iterate over all factMap entries to collect rows + // Keys: "T!T" (tabular/grand total), "0!T", "1!T" (summary groups), "0!0", "1!0" (matrix), etc. + for (const [factMapKey, factMapEntry] of Object.entries(factMap)) { + if (!factMapEntry?.rows) continue; + + // Determine grouping context from the factMap key + const groupContext = resolveGroupingContext( + factMapKey, + groupingValues, + groupingLabels + ); + + for (const row of factMapEntry.rows) { + const rowObj: Record = {}; + + // Add grouping columns if present + for (const [key, value] of Object.entries(groupContext)) { + rowObj[key] = value; + } + + // Map each data cell to its column label + if (row.dataCells) { + for (let i = 0; i < row.dataCells.length; i++) { + const label = columnLabels[i] ?? `Column_${i}`; + const cell = row.dataCells[i]; + let value = cell.label ?? cell.value; + if (value === '-' || value === '--') { + value = ''; + } + rowObj[label] = value; } + } + + allRows.push(rowObj); + } + } + + return { + reportName: + report.attributes?.reportName ?? + report.reportMetadata?.name ?? + 'Unknown Report', + reportId: report.attributes.reportId ?? 'Unknown Report', + totalRows: allRows.length, + columns: [...groupingLabels, ...columnLabels], + rows: allRows, + }; +} + +function extractGroupingValues( + groupings: { + key: string; + label: string; + value: unknown; + groupings?: { key: string; label: string; value: unknown }[]; + }[], + depth = 0, + result: Record = {} +): Record { + for (const grouping of groupings) { + result[grouping.key] = { label: grouping.label, depth }; + if (grouping.groupings && grouping.groupings.length > 0) { + extractGroupingValues(grouping.groupings, depth + 1, result); + } + } + return result; +} + +function resolveGroupingContext( + factMapKey: string, + groupingValues: Record, + groupingLabels: string[] +): Record { + const context: Record = {}; + + // factMap keys are like "0!T", "0_1!T", "T!T", etc. + // The part before "!" represents row groupings, after "!" represents column groupings + const [rowPart] = factMapKey.split('!'); + + if (rowPart === 'T' || !rowPart) { + return context; // Grand total or no grouping + } + + // Row grouping keys can be like "0", "0_1" (nested groupings) + const rowKeys = rowPart.split('_'); + + let currentKey = ''; + + for (let depth = 0; depth < rowKeys.length; depth++) { + currentKey = + depth === 0 ? rowKeys[depth] : `${currentKey}_${rowKeys[depth]}`; + + const groupInfo = groupingValues[currentKey]; + + if (!groupInfo) continue; + + const columnLabel = groupingLabels[depth] ?? `Group_${depth}`; - const response = await callSalesforceApi( - HttpMethod.POST, - context.auth, - `/services/data/v56.0/analytics/reports/${report_id}`, - body - ); + context[columnLabel] = groupInfo.label; + } - return response.body; - }, -}); \ No newline at end of file + return context; +} diff --git a/packages/react-ui/public/locales/de/translation.json b/packages/react-ui/public/locales/de/translation.json index 27c847d7a31..50c851e0682 100644 --- a/packages/react-ui/public/locales/de/translation.json +++ b/packages/react-ui/public/locales/de/translation.json @@ -486,8 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -845,11 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_one": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "Ordner auswählen", @@ -1396,5 +1390,11 @@ "License activated successfully!": "Lizenz erfolgreich aktiviert!", "Activation failed, invalid license key": "Aktivierung fehlgeschlagen, ungültiger Lizenzschlüssel", "Today": "Heute", - "Yesterday": "Gestern" -} + "Yesterday": "Gestern", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_one": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/react-ui/public/locales/es/translation.json b/packages/react-ui/public/locales/es/translation.json index d27e1043571..396e2dc622c 100644 --- a/packages/react-ui/public/locales/es/translation.json +++ b/packages/react-ui/public/locales/es/translation.json @@ -486,9 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_many": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -846,13 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_one": "", - "{count} flows created successfully in a new folder_many": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._many": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "Seleccione una carpeta", @@ -1399,5 +1390,11 @@ "License activated successfully!": "¡Licencia activada con éxito!", "Activation failed, invalid license key": "Falló la activación, clave de licencia no válida", "Today": "Hoy", - "Yesterday": "Ayer" -} + "Yesterday": "Ayer", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_one": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/react-ui/public/locales/fr/translation.json b/packages/react-ui/public/locales/fr/translation.json index 6a2b059993d..2e755efa06b 100644 --- a/packages/react-ui/public/locales/fr/translation.json +++ b/packages/react-ui/public/locales/fr/translation.json @@ -486,9 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_many": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -846,13 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_one": "", - "{count} flows created successfully in a new folder_many": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._many": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "Sélectionnez un dossier", @@ -1399,5 +1390,11 @@ "License activated successfully!": "Licence activée avec succès !", "Activation failed, invalid license key": "Échec de l'activation, clé de licence invalide", "Today": "Aujourd'hui", - "Yesterday": "Hier" -} + "Yesterday": "Hier", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_one": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/react-ui/public/locales/ja/translation.json b/packages/react-ui/public/locales/ja/translation.json index 406b3b84f2a..ec2817435cb 100644 --- a/packages/react-ui/public/locales/ja/translation.json +++ b/packages/react-ui/public/locales/ja/translation.json @@ -486,7 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -844,9 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "フォルダを選択", @@ -1393,5 +1390,8 @@ "License activated successfully!": "ライセンスが正常にアクティベートされました!", "Activation failed, invalid license key": "アクティベーションに失敗しました。無効なライセンスキーです。", "Today": "今日", - "Yesterday": "昨日" -} + "Yesterday": "昨日", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/react-ui/public/locales/nl/translation.json b/packages/react-ui/public/locales/nl/translation.json index e8ea1827839..8a7e9b1f5bb 100644 --- a/packages/react-ui/public/locales/nl/translation.json +++ b/packages/react-ui/public/locales/nl/translation.json @@ -486,8 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -845,11 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_one": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "Selecteer een map", @@ -1396,5 +1390,11 @@ "License activated successfully!": "Licentie succesvol geactiveerd!", "Activation failed, invalid license key": "Activering mislukt, ongeldige licentiesleutel", "Today": "vandaag", - "Yesterday": "gisteren" -} + "Yesterday": "gisteren", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_one": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/react-ui/public/locales/pt/translation.json b/packages/react-ui/public/locales/pt/translation.json index 1cd95b61bd4..91ee9aeabe2 100644 --- a/packages/react-ui/public/locales/pt/translation.json +++ b/packages/react-ui/public/locales/pt/translation.json @@ -486,9 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_many": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -846,13 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_one": "", - "{count} flows created successfully in a new folder_many": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._many": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "Selecionar uma pasta", @@ -1399,5 +1390,11 @@ "License activated successfully!": "Licença ativada com sucesso!", "Activation failed, invalid license key": "A ativação falhou, chave de licença inválida", "Today": "hoje", - "Yesterday": "ontem" -} + "Yesterday": "ontem", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_one": "", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_one": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._one": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/react-ui/public/locales/zh/translation.json b/packages/react-ui/public/locales/zh/translation.json index 7888ebbac58..13330abe326 100644 --- a/packages/react-ui/public/locales/zh/translation.json +++ b/packages/react-ui/public/locales/zh/translation.json @@ -486,7 +486,6 @@ "Time Saved": "", "Estimated hours saved through automation in the last 3 months. Each automated task saves valuable employee time that can be redirected to high-impact work.": "", "Equivalent to {days} workdays saved": "", - "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", "Click the": "", "pencil icon in the table below to set time saved per run": "", "Trends": "", @@ -844,9 +843,7 @@ "By": "", "No flow preview available": "", "Flow created successfully": "", - "{count} flows created successfully in a new folder_other": "", "Failed to create flow from template": "", - "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "", "Select the project and folder where you want to use this template.": "", "Select a project": "", "Select a folder": "选择一个文件夹", @@ -1393,5 +1390,8 @@ "License activated successfully!": "License activated successfully!", "Activation failed, invalid license key": "Activation failed, invalid license key", "Today": "今日:", - "Yesterday": "Yesterday" -} + "Yesterday": "Yesterday", + "You have {count} {count, plural, one {flow} other {flows}} without time saved per run. Add it to see your complete automation impact!_other": "", + "{count} flows created successfully in a new folder_other": "", + "This template includes {count} flows with all dependencies. A new folder will be created to organize them._other": "" +} \ No newline at end of file diff --git a/packages/server/worker/src/lib/compute/sandbox/sandbox.ts b/packages/server/worker/src/lib/compute/sandbox/sandbox.ts index d53c18c69ea..d50218a2bc9 100644 --- a/packages/server/worker/src/lib/compute/sandbox/sandbox.ts +++ b/packages/server/worker/src/lib/compute/sandbox/sandbox.ts @@ -169,7 +169,8 @@ export const createSandbox = (log: FastifyBaseLogger, sandboxId: string, options sandboxId, operationType, killedByTimeout, - }, '[Sandbox] Execute completed (finally block), listener NOT removed') + }, '[Sandbox] Execute completed (finally block), removing listener') + sandboxWebsocketServer.removeListener(sandboxId) if (!isNil(timeout)) { clearTimeout(timeout) } diff --git a/packages/server/worker/src/lib/compute/sandbox/websocket-server.ts b/packages/server/worker/src/lib/compute/sandbox/websocket-server.ts index 463bdea0ca2..73ff53fb41c 100644 --- a/packages/server/worker/src/lib/compute/sandbox/websocket-server.ts +++ b/packages/server/worker/src/lib/compute/sandbox/websocket-server.ts @@ -72,7 +72,6 @@ export const sandboxWebsocketServer = { // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete sockets[sandboxId] socket.removeAllListeners('command') - sandboxWebsocketServer.removeListener(sandboxId) }) })