Add Activepieces integration for workflow automation

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

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

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

View File

@@ -0,0 +1,33 @@
{
"Trello": "Trello",
"Project management tool for teams": "Project management tool for teams",
"API Key": "API Key",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Create Card",
"Get Card": "Get Card",
"Create a new card in Trello": "Create a new card in Trello",
"Get a card in Trello": "Get a card in Trello",
"Boards": "Boards",
"Lists": "Lists",
"Task Name": "Task Name",
"Task Description": "Task Description",
"Position": "Position",
"Labels": "Labels",
"Card ID": "Card ID",
"List of boards": "List of boards",
"Get lists from a board": "Get lists from a board",
"The name of the card to create": "The name of the card to create",
"The description of the card to create": "The description of the card to create",
"Place the card on top or bottom of the list": "Place the card on top or bottom of the list",
"Assign labels to the card": "Assign labels to the card",
"The card ID": "The card ID",
"Top": "Top",
"Bottom": "Bottom",
"Card Moved to list": "Card Moved to list",
"New Card": "New Card",
"Trigger when a card is moved to the list specified": "Trigger when a card is moved to the list specified",
"Trigger when a new card is created": "Trigger when a new card is created"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Projektverwaltungswerkzeug für Teams",
"API Key": "API-Schlüssel",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nUm Ihren API-Schlüssel und Ihr Token zu erhalten, folgen Sie diesen Schritten:\n\n1. Gehen Sie auf https://trello. om/power-ups/admin\n2. Klicke **Neu** um ein neues Power-up\nzu erstellen. Geben Sie die Powerup-Informationen ein und klicken Sie auf **Erstellen**\n4. Klicken Sie auf der API-Schlüsselseite auf **Erzeugen eines neuen API-Schlüssels**\n5. Kopieren Sie den **API Schlüssel** und geben Sie ihn in die Trello API Key Verbindung\nein. Klicke **manuell ein Token** neben dem API-Schlüsselfeld\nan. Kopieren Sie den Token und fügen Sie ihn in die Trello Token Verbindung\nein. Ihre Verbindung sollte jetzt funktionieren!\n",
"Create Card": "Karte erstellen",
"Get Card": "Karte erhalten",
"Update Card": "Karte aktualisieren",
"Delete Card": "Karte löschen",
"Get All Card Attachments": "Alle Kartenanhänge erhalten",
"Add Card Attachment": "Kartenanhang hinzufügen",
"Get Card Attachment": "Kartenanhang erhalten",
"Delete Card Attachment": "Kartenanhang löschen",
"Create a new card in Trello": "Erstelle eine neue Karte in Trello",
"Gets a card by ID.": "Ruft eine Karte per ID ab.",
"Updates an existing card.": "Aktualisiert eine vorhandene Karte.",
"Deletes an existing card.": "Löscht eine vorhandene Karte.",
"Gets all attachments on a card.": "Ruft alle Anhänge auf einer Karte ab.",
"Adds an attachment to a card.": "Fügt einer Karte einen Anhang hinzu.",
"Gets a specific attachment on a card.": "Ruft einen bestimmten Anhang auf eine Karte ab.",
"Deletes an attachment from a card.": "Löscht einen Anhang von einer Karte.",
"Boards": "Boards",
"Lists": "Listen",
"Task Name": "Aufgabenname",
"Task Description": "Aufgabenbeschreibung",
"Position": "Position",
"Labels": "Etiketten",
"Card ID": "Kartennummer",
"Card Name": "Kartenname",
"Card Description": "Kartenbeschreibung",
"Archived": "Archiviert",
"Due Date": "Fälligkeitsdatum",
"Attachment File": "Dateianhang",
"Attachment Name": "Anhangname",
"MIME Type": "MIME-Typ",
"Set as Cover": "Als Cover festlegen",
"Attachment ID": "Anhang-ID",
"List of boards": "Liste der Boards",
"Get lists from a board": "Listen von einem Board abrufen",
"The name of the card to create": "Der Name der zu erstellenden Karte",
"The description of the card to create": "Die Beschreibung der zu erstellenden Karte",
"Place the card on top or bottom of the list": "Platziere die Karte oben oder unten auf der Liste",
"Assign labels to the card": "Beschriftungen der Karte zuweisen",
"The card ID": "Die Kartennummer",
"The ID of the card to update": "Die ID der zu aktualisierenden Karte",
"The new name of the card": "Der neue Name der Karte",
"The new description of the card": "Die neue Beschreibung der Karte",
"Move the card to a new position": "Verschiebe die Karte an eine neue Position",
"Archive or unarchive the card": "Karte archivieren oder dearchivieren",
"Set a due date for the card": "Fälligkeitsdatum für die Karte festlegen",
"The ID of the card to delete.": "Die ID der zu löschenden Karte.",
"The ID of the card to get attachments from": "Die ID der Karte, um Anhänge von",
"The ID of the card to add attachment to": "Die ID der Karte zum Hinzufügen des Anhangs",
"Set this attachment as the card cover": "Diesen Anhang als Kartencover festlegen",
"The ID of the card": "Die ID der Karte",
"The ID of the attachment to retrieve": "Die ID des zu empfangenen Anhangs",
"The ID of the attachment to delete": "ID des zu löschenden Anhangs",
"Top": "Oben",
"Bottom": "Unten",
"Card Moved to list": "Karte in Liste verschoben",
"New Card": "Neue Karte",
"Card Deadline": "Kartenfrist",
"Trigger when a card is moved to the list specified": "Auslösen wenn eine Karte in die angegebene Liste verschoben wird",
"Trigger when a new card is created": "Auslösen wenn eine neue Karte erstellt wird",
"Triggers at a specified time before a card deadline.": "Löst zu einer bestimmten Zeit vor einer Kartenfrist aus.",
"Time unit": "Zeiteinheit",
"Time before due": "Zeit vor Fälligkeit",
"Select unit for time before due": "Einheit vor Fälligkeit auswählen",
"How long before the due date the trigger should run (use with time unit)": "Wie lange vor dem Fälligkeitsdatum der Trigger laufen soll (Verwendung mit Zeiteinheit)",
"Minutes": "Minuten",
"Hours": "Stunden"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Herramienta de gestión de proyectos para equipos",
"API Key": "Clave API",
"Trello API Key": "Clave API de Trello",
"Token": "Token",
"Trello Token": "Token de Trello",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nPara obtener tu clave API y token, sigue estos pasos:\n\n1. Ve a https://trello. om/power-ups/admin\n2. Haga clic en **Nuevo** para crear un nuevo potenciador\n3. Introduzca información de encendido y haga clic en **Crear**\n4. Desde la página de la clave de API, haga clic en **Generar una nueva clave API**\n5. Copie la **clave API** e introdúzcala en la conexión de Trello API Key\n6. Haga clic en **generar manualmente un token** junto al campo de clave API\n7. Copia el token y pégalo en la conexión de Trello Token\n8. ¡Tu conexión debería funcionar!\n",
"Create Card": "Crear tarjeta",
"Get Card": "Obtener tarjeta",
"Update Card": "Actualizar tarjeta",
"Delete Card": "Eliminar tarjeta",
"Get All Card Attachments": "Obtener todos los archivos adjuntos de tarjeta",
"Add Card Attachment": "Añadir adjunto de tarjeta",
"Get Card Attachment": "Obtener adjunto de tarjeta",
"Delete Card Attachment": "Eliminar adjunto de tarjeta",
"Create a new card in Trello": "Crear una nueva tarjeta en Trello",
"Gets a card by ID.": "Obtiene una tarjeta por ID.",
"Updates an existing card.": "Actualiza una tarjeta existente.",
"Deletes an existing card.": "Elimina una tarjeta existente.",
"Gets all attachments on a card.": "Obtiene todos los archivos adjuntos en una tarjeta.",
"Adds an attachment to a card.": "Añade un archivo adjunto a una tarjeta.",
"Gets a specific attachment on a card.": "Obtiene un archivo adjunto específico en una tarjeta.",
"Deletes an attachment from a card.": "Elimina un archivo adjunto de una tarjeta.",
"Boards": "Tableros",
"Lists": "Listas",
"Task Name": "Nombre de tarea",
"Task Description": "Descripción de la tarea",
"Position": "Posición",
"Labels": "Etiquetas",
"Card ID": "ID de tarjeta",
"Card Name": "Nombre de la tarjeta",
"Card Description": "Descripción de la tarjeta",
"Archived": "Archivado",
"Due Date": "Fecha de fin",
"Attachment File": "Archivo adjunto",
"Attachment Name": "Nombre del archivo adjunto",
"MIME Type": "Tipo MIME",
"Set as Cover": "Establecer como portada",
"Attachment ID": "ID de adjunto",
"List of boards": "Lista de tableros",
"Get lists from a board": "Obtener listas de un tablero",
"The name of the card to create": "El nombre de la tarjeta a crear",
"The description of the card to create": "La descripción de la tarjeta a crear",
"Place the card on top or bottom of the list": "Coloca la tarjeta en la parte superior o inferior de la lista",
"Assign labels to the card": "Asignar etiquetas a la tarjeta",
"The card ID": "El ID de tarjeta",
"The ID of the card to update": "El ID de la tarjeta a actualizar",
"The new name of the card": "El nuevo nombre de la tarjeta",
"The new description of the card": "La nueva descripción de la tarjeta",
"Move the card to a new position": "Mover la tarjeta a una nueva posición",
"Archive or unarchive the card": "Archivar o desarchivar la tarjeta",
"Set a due date for the card": "Establecer una fecha límite para la tarjeta",
"The ID of the card to delete.": "El ID de la tarjeta a eliminar.",
"The ID of the card to get attachments from": "El ID de la tarjeta para obtener archivos adjuntos de",
"The ID of the card to add attachment to": "El ID de la tarjeta a la que agregar el archivo adjunto",
"Set this attachment as the card cover": "Establecer este adjunto como la portada de la tarjeta",
"The ID of the card": "El ID de la tarjeta",
"The ID of the attachment to retrieve": "El ID del archivo adjunto a recuperar",
"The ID of the attachment to delete": "El ID del archivo adjunto a eliminar",
"Top": "Subir",
"Bottom": "Abajo",
"Card Moved to list": "Tarjeta movida a la lista",
"New Card": "Nueva tarjeta",
"Card Deadline": "Fecha límite de tarjeta",
"Trigger when a card is moved to the list specified": "Activar cuando una tarjeta se mueve a la lista especificada",
"Trigger when a new card is created": "Activar cuando se crea una nueva tarjeta",
"Triggers at a specified time before a card deadline.": "Dispara en un tiempo especificado antes de la fecha límite de la tarjeta.",
"Time unit": "Unidad de tiempo",
"Time before due": "Tiempo antes del vencimiento",
"Select unit for time before due": "Seleccionar unidad antes del vencimiento",
"How long before the due date the trigger should run (use with time unit)": "Cuánto tiempo antes de la fecha de vencimiento debe ejecutarse el disparador (usar con unidad de tiempo)",
"Minutes": "Minutos",
"Hours": "Horas"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Outil de gestion de projet pour les équipes",
"API Key": "Clé API",
"Trello API Key": "Clé API Trello",
"Token": "Jeton",
"Trello Token": "Jeton de Trello",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Créer une carte",
"Get Card": "Obtenir une carte",
"Update Card": "Mettre à jour la carte",
"Delete Card": "Supprimer la carte",
"Get All Card Attachments": "Obtenir toutes les pièces jointes de la carte",
"Add Card Attachment": "Ajouter une pièce jointe de la carte",
"Get Card Attachment": "Obtenir une pièce jointe de carte",
"Delete Card Attachment": "Supprimer la pièce jointe de la carte",
"Create a new card in Trello": "Créer une nouvelle carte dans Trello",
"Gets a card by ID.": "Renvoie une carte par ID.",
"Updates an existing card.": "Met à jour une carte existante.",
"Deletes an existing card.": "Supprime une carte existante.",
"Gets all attachments on a card.": "Obtient toutes les pièces jointes sur une carte.",
"Adds an attachment to a card.": "Ajoute une pièce jointe à une carte.",
"Gets a specific attachment on a card.": "Obtient une pièce jointe spécifique sur une carte.",
"Deletes an attachment from a card.": "Supprime une pièce jointe d'une carte.",
"Boards": "Tableaux",
"Lists": "Listes",
"Task Name": "Nom de la tâche",
"Task Description": "Description de tâche",
"Position": "Position",
"Labels": "Étiquettes",
"Card ID": "ID de la carte",
"Card Name": "Nom de la carte",
"Card Description": "Description de la carte",
"Archived": "Archivé",
"Due Date": "Date de fin",
"Attachment File": "Fichier pièce jointe",
"Attachment Name": "Nom de la pièce jointe",
"MIME Type": "Type MIME",
"Set as Cover": "Définir comme couverture",
"Attachment ID": "ID de la pièce jointe",
"List of boards": "Liste des tableaux",
"Get lists from a board": "Récupérer les listes depuis un tableau",
"The name of the card to create": "Le nom de la carte à créer",
"The description of the card to create": "La description de la carte à créer",
"Place the card on top or bottom of the list": "Placer la carte en haut ou en bas de la liste",
"Assign labels to the card": "Assigner des étiquettes à la carte",
"The card ID": "L'ID de la carte",
"The ID of the card to update": "L'ID de la carte à mettre à jour",
"The new name of the card": "Le nouveau nom de la carte",
"The new description of the card": "La nouvelle description de la carte",
"Move the card to a new position": "Déplacer la carte vers une nouvelle position",
"Archive or unarchive the card": "Archiver ou désarchiver la carte",
"Set a due date for the card": "Définir une date d'échéance pour la carte",
"The ID of the card to delete.": "L'ID de la carte à supprimer.",
"The ID of the card to get attachments from": "L'ID de la carte pour obtenir des pièces jointes de",
"The ID of the card to add attachment to": "L'ID de la carte à ajouter à la pièce jointe",
"Set this attachment as the card cover": "Définir cette pièce jointe comme couverture de carte",
"The ID of the card": "L'ID de la carte",
"The ID of the attachment to retrieve": "L'ID de la pièce jointe à récupérer",
"The ID of the attachment to delete": "L'ID de la pièce jointe à supprimer",
"Top": "En haut",
"Bottom": "Bas",
"Card Moved to list": "Carte déplacée vers la liste",
"New Card": "Nouvelle carte",
"Card Deadline": "Date limite de la carte",
"Trigger when a card is moved to the list specified": "Déclencher quand une carte est déplacée dans la liste spécifiée",
"Trigger when a new card is created": "Déclencher quand une nouvelle carte est créée",
"Triggers at a specified time before a card deadline.": "Déclenche à un moment précis avant la date limite de la carte.",
"Time unit": "Unité de temps",
"Time before due": "Temps avant échéance",
"Select unit for time before due": "Sélectionnez l'unité pour le temps avant la date limite",
"How long before the due date the trigger should run (use with time unit)": "Combien de temps avant la date d'échéance le déclencheur doit s'exécuter (utiliser avec l'unité de temps)",
"Minutes": "Minutes",
"Hours": "Heures"
}

View File

@@ -0,0 +1,33 @@
{
"Trello": "Trello",
"Project management tool for teams": "Project management tool for teams",
"API Key": "API Key",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Create Card",
"Get Card": "Get Card",
"Create a new card in Trello": "Create a new card in Trello",
"Get a card in Trello": "Get a card in Trello",
"Boards": "Boards",
"Lists": "Lists",
"Task Name": "Task Name",
"Task Description": "Task Description",
"Position": "Position",
"Labels": "Labels",
"Card ID": "Card ID",
"List of boards": "List of boards",
"Get lists from a board": "Get lists from a board",
"The name of the card to create": "The name of the card to create",
"The description of the card to create": "The description of the card to create",
"Place the card on top or bottom of the list": "Place the card on top or bottom of the list",
"Assign labels to the card": "Assign labels to the card",
"The card ID": "The card ID",
"Top": "Top",
"Bottom": "Bottom",
"Card Moved to list": "Card Moved to list",
"New Card": "New Card",
"Trigger when a card is moved to the list specified": "Trigger when a card is moved to the list specified",
"Trigger when a new card is created": "Trigger when a new card is created"
}

View File

@@ -0,0 +1,33 @@
{
"Trello": "Trello",
"Project management tool for teams": "Project management tool for teams",
"API Key": "API Key",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Create Card",
"Get Card": "Get Card",
"Create a new card in Trello": "Create a new card in Trello",
"Get a card in Trello": "Get a card in Trello",
"Boards": "Boards",
"Lists": "Lists",
"Task Name": "Task Name",
"Task Description": "Task Description",
"Position": "Position",
"Labels": "Labels",
"Card ID": "Card ID",
"List of boards": "List of boards",
"Get lists from a board": "Get lists from a board",
"The name of the card to create": "The name of the card to create",
"The description of the card to create": "The description of the card to create",
"Place the card on top or bottom of the list": "Place the card on top or bottom of the list",
"Assign labels to the card": "Assign labels to the card",
"The card ID": "The card ID",
"Top": "Top",
"Bottom": "Bottom",
"Card Moved to list": "Card Moved to list",
"New Card": "New Card",
"Trigger when a card is moved to the list specified": "Trigger when a card is moved to the list specified",
"Trigger when a new card is created": "Trigger when a new card is created"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "チームのためのプロジェクト管理ツール",
"API Key": "API キー",
"Trello API Key": "Trello APIキー",
"Token": "トークン",
"Trello Token": "Trelloトークン",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "カードを作成",
"Get Card": "カードを取得",
"Update Card": "カードを更新",
"Delete Card": "カードを削除",
"Get All Card Attachments": "すべてのカード添付ファイルを取得",
"Add Card Attachment": "カード添付ファイルを追加",
"Get Card Attachment": "カードアタッチメントを取得",
"Delete Card Attachment": "カード添付ファイルを削除",
"Create a new card in Trello": "Trelloで新しいカードを作成",
"Gets a card by ID.": "IDでカードを取得します。",
"Updates an existing card.": "既存のカードを更新します。",
"Deletes an existing card.": "既存のカードを削除する。",
"Gets all attachments on a card.": "カード上のすべての添付ファイルを取得します。",
"Adds an attachment to a card.": "カードに添付ファイルを追加します。",
"Gets a specific attachment on a card.": "カード上の特定の添付ファイルを取得します。",
"Deletes an attachment from a card.": "カードから添付ファイルを削除します。",
"Boards": "ボード",
"Lists": "リスト",
"Task Name": "タスク名",
"Task Description": "タスクの説明",
"Position": "位置",
"Labels": "ラベル",
"Card ID": "カードID",
"Card Name": "カード名",
"Card Description": "カードの説明",
"Archived": "アーカイブ済み",
"Due Date": "締切日",
"Attachment File": "添付ファイル",
"Attachment Name": "添付ファイル名",
"MIME Type": "MIMEタイプ",
"Set as Cover": "カバーとして設定",
"Attachment ID": "添付ファイルID",
"List of boards": "ボードの一覧",
"Get lists from a board": "ボードからリストを取得する",
"The name of the card to create": "作成するカードの名前",
"The description of the card to create": "作成するカードの説明",
"Place the card on top or bottom of the list": "カードをリストの上部または下部に配置します",
"Assign labels to the card": "カードにラベルを割り当てる",
"The card ID": "カードID",
"The ID of the card to update": "更新するカードのID",
"The new name of the card": "カードの新しい名前",
"The new description of the card": "カードの新しい説明",
"Move the card to a new position": "カードを新しい位置に移動する",
"Archive or unarchive the card": "カードをアーカイブまたはアーカイブ解除",
"Set a due date for the card": "カードの期日を設定",
"The ID of the card to delete.": "削除するカードの ID",
"The ID of the card to get attachments from": "添付ファイルを取得するカードの ID",
"The ID of the card to add attachment to": "添付ファイルを追加するカードのID",
"Set this attachment as the card cover": "この添付ファイルをカードカバーとして設定する",
"The ID of the card": "カードのID",
"The ID of the attachment to retrieve": "取得する添付ファイルのID",
"The ID of the attachment to delete": "削除する添付ファイルのID",
"Top": "上",
"Bottom": "下揃え",
"Card Moved to list": "カードがリストに移動しました",
"New Card": "新しいカード",
"Card Deadline": "カードの期限",
"Trigger when a card is moved to the list specified": "カードが指定されたリストに移動したときにトリガーします",
"Trigger when a new card is created": "新しいカードが作成されたときにトリガーする",
"Triggers at a specified time before a card deadline.": "カードの期限の前に指定した時間でトリガーします。",
"Time unit": "時間単位",
"Time before due": "予定より前の時間",
"Select unit for time before due": "期日前の単位を選択してください",
"How long before the due date the trigger should run (use with time unit)": "期日の前にトリガーを実行する時間(時間単位で使用)",
"Minutes": "分",
"Hours": "時間"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Functie voor projectbeheer voor teams",
"API Key": "API Sleutel",
"Trello API Key": "Trello API-sleutel",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nOm uw API-sleutel en token te verkrijgen, volg de volgende stappen:\n\n1. Ga naar https://trello. om/power-ups/admin\n2. Klik **Nieuw** om een nieuwe power-up\n3 te maken. Voer power-up informatie in en klik op **Aanmaken**\n4. Vanuit de API Key pagina klik op **Genereer een nieuwe API key**\n5. Kopieer **API Key** en voer het in in de Trello API Key connectie\n6. Klik **handmatig een Token** naast het API-sleutelveld\n7. Kopieer het token en plak het in de Trello Token verbinding\n8. Je verbinding moet nu werken!\n",
"Create Card": "Kaart aanmaken",
"Get Card": "Kaart ophalen",
"Update Card": "Kaart bijwerken",
"Delete Card": "Kaart verwijderen",
"Get All Card Attachments": "Alle bijlage(n) van de kaart ophalen",
"Add Card Attachment": "Kaart bijlage toevoegen",
"Get Card Attachment": "Haal bijlage(n) op",
"Delete Card Attachment": "Verwijder bijlage kaart",
"Create a new card in Trello": "Maak een nieuwe kaart in Trello",
"Gets a card by ID.": "Haalt een kaart op via ID.",
"Updates an existing card.": "Werkt een bestaande kaart bij.",
"Deletes an existing card.": "Verwijdert een bestaande kaart.",
"Gets all attachments on a card.": "Haalt alle bijlagen op een kaart.",
"Adds an attachment to a card.": "Voegt een bijlage toe aan een kaart.",
"Gets a specific attachment on a card.": "Haalt een specifieke bijlage op een kaart op.",
"Deletes an attachment from a card.": "Verwijdert een bijlage van een kaart.",
"Boards": "Onderwerpen",
"Lists": "Lijsten",
"Task Name": "Taak naam",
"Task Description": "Beschrijving taak",
"Position": "Positie",
"Labels": "Labels",
"Card ID": "Kaart ID",
"Card Name": "Creditcard naam",
"Card Description": "Kaart omschrijving",
"Archived": "Gearchiveerd",
"Due Date": "Inleverdatum",
"Attachment File": "Bijlage bestand",
"Attachment Name": "Bijlage naam",
"MIME Type": "MIME-type",
"Set as Cover": "Instellen als Cover",
"Attachment ID": "Bijlage ID",
"List of boards": "Lijst van borden",
"Get lists from a board": "Haal lijsten op van een bord",
"The name of the card to create": "De naam van de te maken kaart",
"The description of the card to create": "De beschrijving van de te maken kaart",
"Place the card on top or bottom of the list": "Plaats de kaart boven of onder in de lijst",
"Assign labels to the card": "Wijs labels toe aan de kaart",
"The card ID": "De kaart ID",
"The ID of the card to update": "Het te updaten ID van de kaart",
"The new name of the card": "De nieuwe naam van de kaart",
"The new description of the card": "De nieuwe beschrijving van de kaart",
"Move the card to a new position": "Verplaats de kaart naar een nieuwe positie",
"Archive or unarchive the card": "Archief of dearchiveer de kaart",
"Set a due date for the card": "Stel een vervaldatum in voor de kaart",
"The ID of the card to delete.": "Het ID van de kaart om te verwijderen.",
"The ID of the card to get attachments from": "Het ID van de kaart om bijlagen van te krijgen",
"The ID of the card to add attachment to": "Het ID van de kaart om een bijlage aan toe te voegen",
"Set this attachment as the card cover": "Stel deze bijlage in als de kaartafdekking",
"The ID of the card": "De ID van de kaart",
"The ID of the attachment to retrieve": "Het ID van de op te halen bijlage",
"The ID of the attachment to delete": "Het ID van de te verwijderen bijlage",
"Top": "Bovenkant",
"Bottom": "Onderaan",
"Card Moved to list": "Kaart verplaatst naar lijst",
"New Card": "Nieuwe creditcard",
"Card Deadline": "Kaart Deadline",
"Trigger when a card is moved to the list specified": "Trigger wanneer een kaart wordt verplaatst naar de opgegeven lijst",
"Trigger when a new card is created": "Trigger wanneer een nieuwe kaart wordt gemaakt",
"Triggers at a specified time before a card deadline.": "Triggert om een bepaalde tijd voor een kaartdeadline.",
"Time unit": "Tijd eenheid",
"Time before due": "Tijd voor vervaldatum",
"Select unit for time before due": "Kies eerst de eenheid voor de tijd",
"How long before the due date the trigger should run (use with time unit)": "Hoe lang voor de vervaldatum moet de trigger worden uitgevoerd (gebruik met tijd-eenheid)",
"Minutes": "minuten",
"Hours": "Uren"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Ferramenta de gerenciamento de projetos para equipes",
"API Key": "Chave de API",
"Trello API Key": "Chave API da Trello",
"Token": "Identificador",
"Trello Token": "Token Trello",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nPara obter sua chave de API e token, siga estes passos:\n\n1. Vá para https://trello. om/power-ups/admin\n2. Clique em **Novo** para criar um novo power-up\n3. Insira informações do power-up e clique em **Criar**\n4. Na página da chave de API, clique em **Gerar uma nova chave de API**\n5. Copiar **Chave de API** e inseri-la na conexão de chave de API do Trello\n6. Clique em **gerar um Token** ao lado do campo da chave API\n7. Copie o token e cole na conexão do token Trello\n8. Sua conexão deve funcionar agora!\n",
"Create Card": "Criar cartão",
"Get Card": "Obter o cartão",
"Update Card": "Atualizar Cartão",
"Delete Card": "Excluir cartão",
"Get All Card Attachments": "Obter todos os anexos do cartão",
"Add Card Attachment": "Adicionar anexo de cartão",
"Get Card Attachment": "Obter anexo do cartão",
"Delete Card Attachment": "Excluir anexo do cartão",
"Create a new card in Trello": "Criar um novo cartão no Trello",
"Gets a card by ID.": "Obtém um cartão por ID.",
"Updates an existing card.": "Atualiza um cartão existente.",
"Deletes an existing card.": "Exclui um cartão existente.",
"Gets all attachments on a card.": "Obtém todos os anexos do cartão.",
"Adds an attachment to a card.": "Adiciona um anexo a um cartão.",
"Gets a specific attachment on a card.": "Obtém um anexo específico em um cartão.",
"Deletes an attachment from a card.": "Exclui um anexo de um cartão.",
"Boards": "Quadros",
"Lists": "Listas",
"Task Name": "Nome da tarefa",
"Task Description": "Descrição da tarefa",
"Position": "Posição",
"Labels": "Marcadores",
"Card ID": "ID do cartão",
"Card Name": "Nome do Cartão",
"Card Description": "Descrição do cartão",
"Archived": "Arquivado",
"Due Date": "Data de vencimento",
"Attachment File": "Arquivo anexo",
"Attachment Name": "Nome do anexo",
"MIME Type": "Tipo MIME",
"Set as Cover": "Definir como capa",
"Attachment ID": "ID do anexo",
"List of boards": "Lista de boards",
"Get lists from a board": "Obter listas de um board",
"The name of the card to create": "O nome do cartão para criar",
"The description of the card to create": "A descrição do cartão para criar",
"Place the card on top or bottom of the list": "Coloque o cartão no topo ou no final da lista",
"Assign labels to the card": "Atribuir etiquetas ao cartão",
"The card ID": "A identificação do cartão",
"The ID of the card to update": "A identificação do cartão para atualizar",
"The new name of the card": "O novo nome do cartão",
"The new description of the card": "A nova descrição do cartão",
"Move the card to a new position": "Mover o cartão para uma nova posição",
"Archive or unarchive the card": "Arquivar ou desarquivar o cartão",
"Set a due date for the card": "Definir data limite para o cartão",
"The ID of the card to delete.": "A ID do cartão para excluir.",
"The ID of the card to get attachments from": "A ID do cartão para obter anexos de",
"The ID of the card to add attachment to": "O ID do cartão para adicionar anexo",
"Set this attachment as the card cover": "Defina este anexo como a capa do cartão",
"The ID of the card": "A identificação do cartão",
"The ID of the attachment to retrieve": "O ID do anexo a ser recuperado",
"The ID of the attachment to delete": "O ID do anexo a excluir",
"Top": "Superior",
"Bottom": "Inferior",
"Card Moved to list": "Cartão movido para a lista",
"New Card": "Novo cartão",
"Card Deadline": "Data limite do cartão",
"Trigger when a card is moved to the list specified": "Aciona quando um cartão é movido para a lista especificada",
"Trigger when a new card is created": "Ativar quando um novo cartão for criado",
"Triggers at a specified time before a card deadline.": "Dispara em um determinado tempo antes do prazo de uma carta.",
"Time unit": "Unidade de tempo",
"Time before due": "Tempo antes do vencimento",
"Select unit for time before due": "Selecione a unidade para o tempo antes do vencimento",
"How long before the due date the trigger should run (use with time unit)": "Quanto tempo antes da data de vencimento, o gatilho deve ser executado (usar com a unidade de tempo)",
"Minutes": "minutos",
"Hours": "horas"
}

View File

@@ -0,0 +1,41 @@
{
"Trello": "Трелло",
"Project management tool for teams": "Инструмент управления проектами для команд",
"API Key": "Ключ API",
"Trello API Key": "Ключ API Trello",
"Token": "Токен",
"Trello Token": "Токен Trello",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Создать карту",
"Get Card": "Получить карту",
"Create a new card in Trello": "Создать новую карту в Trello",
"Get a card in Trello": "Получить карту в Trello",
"Boards": "Доски",
"Lists": "Списки",
"Task Name": "Название задачи",
"Task Description": "Описание задачи",
"Position": "Позиция",
"Labels": "Метки",
"Card ID": "ID карты",
"List of boards": "Список досок",
"Get lists from a board": "Получать списки с доски",
"The name of the card to create": "Название создаваемой карты",
"The description of the card to create": "Описание создаваемой карты",
"Place the card on top or bottom of the list": "Поместите карту в верхней или нижней части списка",
"Assign labels to the card": "Назначить подписи карте",
"The card ID": "ID карты",
"Top": "Сверху",
"Bottom": "Внизу",
"Card Moved to list": "Карта перемещена в список",
"New Card": "Новая карта",
"Card Deadline": "Срок действия карты",
"Trigger when a card is moved to the list specified": "Срабатывать при перемещении карты в указанный список",
"Trigger when a new card is created": "Срабатывать при создании новой карты",
"Triggers at a specified time before a card deadline.": "Триггеры в указанное время до истечения срока действия карты.",
"Time unit": "Единица времени",
"Time before due": "Время до выполнения",
"Select unit for time before due": "Выберите единицу за время до завершения",
"How long before the due date the trigger should run (use with time unit)": "Как долго до окончания запуска триггера (используйте с единицей времени)",
"Minutes": "Минут",
"Hours": "Часы"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Project management tool for teams",
"API Key": "API Key",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Create Card",
"Get Card": "Get Card",
"Update Card": "Update Card",
"Delete Card": "Delete Card",
"Get All Card Attachments": "Get All Card Attachments",
"Add Card Attachment": "Add Card Attachment",
"Get Card Attachment": "Get Card Attachment",
"Delete Card Attachment": "Delete Card Attachment",
"Create a new card in Trello": "Create a new card in Trello",
"Gets a card by ID.": "Gets a card by ID.",
"Updates an existing card.": "Updates an existing card.",
"Deletes an existing card.": "Deletes an existing card.",
"Gets all attachments on a card.": "Gets all attachments on a card.",
"Adds an attachment to a card.": "Adds an attachment to a card.",
"Gets a specific attachment on a card.": "Gets a specific attachment on a card.",
"Deletes an attachment from a card.": "Deletes an attachment from a card.",
"Boards": "Boards",
"Lists": "Lists",
"Task Name": "Task Name",
"Task Description": "Task Description",
"Position": "Position",
"Labels": "Labels",
"Card ID": "Card ID",
"Card Name": "Card Name",
"Card Description": "Card Description",
"Archived": "Archived",
"Due Date": "Due Date",
"Attachment File": "Attachment File",
"Attachment Name": "Attachment Name",
"MIME Type": "MIME Type",
"Set as Cover": "Set as Cover",
"Attachment ID": "Attachment ID",
"List of boards": "List of boards",
"Get lists from a board": "Get lists from a board",
"The name of the card to create": "The name of the card to create",
"The description of the card to create": "The description of the card to create",
"Place the card on top or bottom of the list": "Place the card on top or bottom of the list",
"Assign labels to the card": "Assign labels to the card",
"The card ID": "The card ID",
"The ID of the card to update": "The ID of the card to update",
"The new name of the card": "The new name of the card",
"The new description of the card": "The new description of the card",
"Move the card to a new position": "Move the card to a new position",
"Archive or unarchive the card": "Archive or unarchive the card",
"Set a due date for the card": "Set a due date for the card",
"The ID of the card to delete.": "The ID of the card to delete.",
"The ID of the card to get attachments from": "The ID of the card to get attachments from",
"The ID of the card to add attachment to": "The ID of the card to add attachment to",
"Set this attachment as the card cover": "Set this attachment as the card cover",
"The ID of the card": "The ID of the card",
"The ID of the attachment to retrieve": "The ID of the attachment to retrieve",
"The ID of the attachment to delete": "The ID of the attachment to delete",
"Top": "Top",
"Bottom": "Bottom",
"Card Moved to list": "Card Moved to list",
"New Card": "New Card",
"Card Deadline": "Card Deadline",
"Trigger when a card is moved to the list specified": "Trigger when a card is moved to the list specified",
"Trigger when a new card is created": "Trigger when a new card is created",
"Triggers at a specified time before a card deadline.": "Triggers at a specified time before a card deadline.",
"Time unit": "Time unit",
"Time before due": "Time before due",
"Select unit for time before due": "Select unit for time before due",
"How long before the due date the trigger should run (use with time unit)": "How long before the due date the trigger should run (use with time unit)",
"Minutes": "Minutes",
"Hours": "Hours"
}

View File

@@ -0,0 +1,41 @@
{
"Trello": "Trello",
"Project management tool for teams": "Project management tool for teams",
"API Key": "API Key",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Create Card",
"Get Card": "Get Card",
"Create a new card in Trello": "Create a new card in Trello",
"Get a card in Trello": "Get a card in Trello",
"Boards": "Boards",
"Lists": "Lists",
"Task Name": "Task Name",
"Task Description": "Task Description",
"Position": "Position",
"Labels": "Labels",
"Card ID": "Card ID",
"List of boards": "List of boards",
"Get lists from a board": "Get lists from a board",
"The name of the card to create": "The name of the card to create",
"The description of the card to create": "The description of the card to create",
"Place the card on top or bottom of the list": "Place the card on top or bottom of the list",
"Assign labels to the card": "Assign labels to the card",
"The card ID": "The card ID",
"Top": "Top",
"Bottom": "Bottom",
"Card Moved to list": "Card Moved to list",
"New Card": "New Card",
"Card Deadline": "Card Deadline",
"Trigger when a card is moved to the list specified": "Trigger when a card is moved to the list specified",
"Trigger when a new card is created": "Trigger when a new card is created",
"Triggers at a specified time before a card deadline.": "Triggers at a specified time before a card deadline.",
"Time unit": "Time unit",
"Time before due": "Time before due",
"Select unit for time before due": "Select unit for time before due",
"How long before the due date the trigger should run (use with time unit)": "How long before the due date the trigger should run (use with time unit)",
"Minutes": "Minutes",
"Hours": "Hours"
}

View File

@@ -0,0 +1,74 @@
{
"Project management tool for teams": "Project management tool for teams",
"API Key": "API 密钥",
"Trello API Key": "Trello API Key",
"Token": "Token",
"Trello Token": "Trello Token",
"\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n": "\nTo obtain your API key and token, follow these steps:\n\n1. Go to https://trello.com/power-ups/admin\n2. Click **New** to create a new power-up\n3. Enter power-up information, and click **Create**\n4. From the API Key page, click **Generate a new API key**\n5. Copy **API Key** and enter it into the Trello API Key connection\n6. Click **manually generate a Token** next to the API key field\n7. Copy the token and paste it into the Trello Token connection\n8. Your connection should now work!\n",
"Create Card": "Create Card",
"Get Card": "Get Card",
"Update Card": "Update Card",
"Delete Card": "Delete Card",
"Get All Card Attachments": "Get All Card Attachments",
"Add Card Attachment": "Add Card Attachment",
"Get Card Attachment": "Get Card Attachment",
"Delete Card Attachment": "Delete Card Attachment",
"Create a new card in Trello": "Create a new card in Trello",
"Gets a card by ID.": "Gets a card by ID.",
"Updates an existing card.": "Updates an existing card.",
"Deletes an existing card.": "Deletes an existing card.",
"Gets all attachments on a card.": "Gets all attachments on a card.",
"Adds an attachment to a card.": "Adds an attachment to a card.",
"Gets a specific attachment on a card.": "Gets a specific attachment on a card.",
"Deletes an attachment from a card.": "Deletes an attachment from a card.",
"Boards": "Boards",
"Lists": "Lists",
"Task Name": "Task Name",
"Task Description": "Task Description",
"Position": "Position",
"Labels": "Labels",
"Card ID": "Card ID",
"Card Name": "Card Name",
"Card Description": "Card Description",
"Archived": "Archived",
"Due Date": "Due Date",
"Attachment File": "Attachment File",
"Attachment Name": "Attachment Name",
"MIME Type": "MIME Type",
"Set as Cover": "Set as Cover",
"Attachment ID": "Attachment ID",
"List of boards": "List of boards",
"Get lists from a board": "Get lists from a board",
"The name of the card to create": "The name of the card to create",
"The description of the card to create": "The description of the card to create",
"Place the card on top or bottom of the list": "Place the card on top or bottom of the list",
"Assign labels to the card": "Assign labels to the card",
"The card ID": "The card ID",
"The ID of the card to update": "The ID of the card to update",
"The new name of the card": "The new name of the card",
"The new description of the card": "The new description of the card",
"Move the card to a new position": "Move the card to a new position",
"Archive or unarchive the card": "Archive or unarchive the card",
"Set a due date for the card": "Set a due date for the card",
"The ID of the card to delete.": "The ID of the card to delete.",
"The ID of the card to get attachments from": "The ID of the card to get attachments from",
"The ID of the card to add attachment to": "The ID of the card to add attachment to",
"Set this attachment as the card cover": "Set this attachment as the card cover",
"The ID of the card": "The ID of the card",
"The ID of the attachment to retrieve": "The ID of the attachment to retrieve",
"The ID of the attachment to delete": "The ID of the attachment to delete",
"Top": "Top",
"Bottom": "Bottom",
"Card Moved to list": "Card Moved to list",
"New Card": "New Card",
"Card Deadline": "Card Deadline",
"Trigger when a card is moved to the list specified": "Trigger when a card is moved to the list specified",
"Trigger when a new card is created": "Trigger when a new card is created",
"Triggers at a specified time before a card deadline.": "Triggers at a specified time before a card deadline.",
"Time unit": "Time unit",
"Time before due": "Time before due",
"Select unit for time before due": "Select unit for time before due",
"How long before the due date the trigger should run (use with time unit)": "How long before the due date the trigger should run (use with time unit)",
"Minutes": "Minutes",
"Hours": "Hours"
}

View File

@@ -0,0 +1,84 @@
import {
HttpMethod,
HttpRequest,
httpClient,
} from '@activepieces/pieces-common';
import { PieceAuth, createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { createCard } from './lib/actions/card/create-card';
import { getCard } from './lib/actions/card/get-card';
import { updateCard } from './lib/actions/card/update-card';
import { deleteCard } from './lib/actions/card/delete-card';
import { getCardAttachments } from './lib/actions/card-attachment/get-card-attachments';
import { addCardAttachment } from './lib/actions/card-attachment/add-card-attachment';
import { getCardAttachment } from './lib/actions/card-attachment/get-card-attachment';
import { deleteCardAttachment } from './lib/actions/card-attachment/delete-card-attachment';
import { cardMovedTrigger } from './lib/triggers/cardMoved';
import { newCardTrigger } from './lib/triggers/newCard';
import { deadlineTrigger } from './lib/triggers/deadline';
const markdownProperty = `
To obtain your API key and token, follow these steps:
1. Go to https://trello.com/power-ups/admin
2. Click **New** to create a new power-up
3. Enter power-up information, and click **Create**
4. From the API Key page, click **Generate a new API key**
5. Copy **API Key** and enter it into the Trello API Key connection
6. Click **manually generate a Token** next to the API key field
7. Copy the token and paste it into the Trello Token connection
8. Your connection should now work!
`;
export const trelloAuth = PieceAuth.BasicAuth({
description: markdownProperty,
required: true,
username: {
displayName: 'API Key',
description: 'Trello API Key',
},
password: {
displayName: 'Token',
description: 'Trello Token',
},
validate: async ({ auth }) => {
const { username, password } = auth;
if (!username || !password) {
return {
valid: false,
error: 'Empty API Key or Token',
};
}
try {
const request: HttpRequest = {
method: HttpMethod.GET,
url:
`https://api.trello.com/1/members/me/boards` +
`?key=` +
username +
`&token=` +
password,
};
await httpClient.sendRequest(request);
return {
valid: true,
};
} catch (e) {
return {
valid: false,
error: 'Invalid API Key or Token',
};
}
},
});
export const trello = createPiece({
displayName: 'Trello',
description: 'Project management tool for teams',
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/trello.png',
authors: ["Salem-Alaa","kishanprmr","MoShizzle","khaledmashaly","abuaboud","AshotZaqoyan"],
categories: [PieceCategory.PRODUCTIVITY],
auth: trelloAuth,
actions: [createCard, getCard, updateCard, deleteCard, getCardAttachments, addCardAttachment, getCardAttachment, deleteCardAttachment],
triggers: [cardMovedTrigger, newCardTrigger, deadlineTrigger],
});

View File

@@ -0,0 +1,82 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
QueryParams,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { trelloAuth } from '../../..';
import FormData from "form-data";
export const addCardAttachment = createAction({
auth: trelloAuth,
name: 'add_card_attachment',
displayName: 'Add Card Attachment',
description: 'Adds an attachment to a card.',
props: {
card_id: Property.ShortText({
description: 'The ID of the card to add attachment to',
displayName: 'Card ID',
required: true,
}),
attachment: Property.File({
displayName: 'Attachment File',
required: true,
}),
name: Property.ShortText({
displayName: 'Attachment Name',
required: false,
}),
mime_type: Property.ShortText({
displayName: 'MIME Type',
required: false,
}),
set_cover: Property.Checkbox({
description: 'Set this attachment as the card cover',
displayName: 'Set as Cover',
required: false,
}),
},
async run(context) {
const attachment = context.propsValue.attachment;
const qs:QueryParams = {}
const formData = new FormData();
formData.append('file',attachment.data,{filename:attachment.filename});
if (context.propsValue['name']) {
qs['name'] = context.propsValue['name'];
}
if (context.propsValue['mime_type']) {
qs['mimeType'] = context.propsValue['mime_type'];
}
if (context.propsValue['set_cover']) {
qs['setCover'] = context.propsValue['set_cover'] ?'true':'false';
}
const request: HttpRequest = {
method: HttpMethod.POST,
url:
`${trelloCommon.baseUrl}cards/${context.propsValue['card_id']}/attachments` +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
...formData.getHeaders()
},
body:formData,
queryParams: qs,
};
const response = await httpClient.sendRequest(request);
return response.body;
},
});

View File

@@ -0,0 +1,47 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { trelloAuth } from '../../..';
export const deleteCardAttachment = createAction({
auth: trelloAuth,
name: 'delete_card_attachment',
displayName: 'Delete Card Attachment',
description: 'Deletes an attachment from a card.',
props: {
card_id: Property.ShortText({
description: 'The ID of the card',
displayName: 'Card ID',
required: true,
}),
attachment_id: Property.ShortText({
description: 'The ID of the attachment to delete',
displayName: 'Attachment ID',
required: true,
}),
},
async run(context) {
const request: HttpRequest = {
method: HttpMethod.DELETE,
url:
`${trelloCommon.baseUrl}cards/${context.propsValue['card_id']}/attachments/${context.propsValue['attachment_id']}` +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
},
queryParams: {},
};
const response = await httpClient.sendRequest(request);
return response.body;
},
});

View File

@@ -0,0 +1,47 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { trelloAuth } from '../../..';
export const getCardAttachment = createAction({
auth: trelloAuth,
name: 'get_card_attachment',
displayName: 'Get Card Attachment',
description: 'Gets a specific attachment on a card.',
props: {
card_id: Property.ShortText({
description: 'The ID of the card',
displayName: 'Card ID',
required: true,
}),
attachment_id: Property.ShortText({
description: 'The ID of the attachment to retrieve',
displayName: 'Attachment ID',
required: true,
})
},
async run(context) {
const request: HttpRequest = {
method: HttpMethod.GET,
url:
`${trelloCommon.baseUrl}cards/${context.propsValue['card_id']}/attachments/${context.propsValue['attachment_id']}` +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest(request);
return response.body;
},
});

View File

@@ -0,0 +1,41 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { trelloAuth } from '../../..';
export const getCardAttachments = createAction({
auth: trelloAuth,
name: 'get_card_attachments',
displayName: 'Get All Card Attachments',
description: 'Gets all attachments on a card.',
props: {
card_id: Property.ShortText({
description: 'The ID of the card to get attachments from',
displayName: 'Card ID',
required: true,
})
},
async run(context) {
const request: HttpRequest = {
method: HttpMethod.GET,
url:
`${trelloCommon.baseUrl}cards/${context.propsValue['card_id']}/attachments` +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest(request);
return response.body;
},
});

View File

@@ -0,0 +1,69 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { TrelloCard } from '../../common/props/card';
import { trelloAuth } from '../../..';
export const createCard = createAction({
auth: trelloAuth,
name: 'create_card',
displayName: 'Create Card',
description: 'Create a new card in Trello',
props: {
board_id: trelloCommon.board_id,
list_id: trelloCommon.list_id,
name: Property.ShortText({
description: 'The name of the card to create',
displayName: 'Task Name',
required: true,
}),
description: Property.LongText({
description: 'The description of the card to create',
displayName: 'Task Description',
required: false,
}),
position: Property.StaticDropdown({
description: 'Place the card on top or bottom of the list',
displayName: 'Position',
required: false,
options: {
options: [
{ label: 'Top', value: 'top' },
{ label: 'Bottom', value: 'bottom' },
],
},
}),
labels: trelloCommon.board_labels,
},
async run(context) {
const request: HttpRequest = {
method: HttpMethod.POST,
url:
`${trelloCommon.baseUrl}cards` +
`?idList=` +
context.propsValue['list_id'] +
`&key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
},
body: {
name: context.propsValue['name'],
desc: context.propsValue['description'],
pos: context.propsValue['position'],
idLabels: context.propsValue['labels'],
},
queryParams: {},
};
const response = await httpClient.sendRequest<TrelloCard>(request);
return response.body;
},
});

View File

@@ -0,0 +1,42 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { trelloAuth } from '../../..';
export const deleteCard = createAction({
auth: trelloAuth,
name: 'delete_card',
displayName: 'Delete Card',
description: 'Deletes an existing card.',
props: {
card_id: Property.ShortText({
description: 'The ID of the card to delete.',
displayName: 'Card ID',
required: true,
}),
},
async run(context) {
const request: HttpRequest = {
method: HttpMethod.DELETE,
url:
`${trelloCommon.baseUrl}cards/${context.propsValue['card_id']}` +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
},
queryParams: {},
};
const response = await httpClient.sendRequest(request);
return response.body;
},
});

View File

@@ -0,0 +1,40 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { TrelloCard } from '../../common/props/card';
import { trelloAuth } from '../../..';
export const getCard = createAction({
auth: trelloAuth,
name: 'get_card',
displayName: 'Get Card',
description: 'Gets a card by ID.',
props: {
cardId: Property.ShortText({
description: 'The card ID',
displayName: 'Card ID',
required: true,
}),
},
async run(context) {
const request: HttpRequest = {
method: HttpMethod.GET,
url:
`${trelloCommon.baseUrl}cards/` +
context.propsValue['cardId'] +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
},
};
return (await httpClient.sendRequest<TrelloCard>(request)).body;
},
});

View File

@@ -0,0 +1,109 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
httpClient,
HttpRequest,
HttpMethod,
} from '@activepieces/pieces-common';
import { trelloCommon } from '../../common';
import { TrelloCard } from '../../common/props/card';
import { trelloAuth } from '../../..';
export const updateCard = createAction({
auth: trelloAuth,
name: 'update_card',
displayName: 'Update Card',
description: 'Updates an existing card.',
props: {
card_id: Property.ShortText({
description: 'The ID of the card to update',
displayName: 'Card ID',
required: true,
}),
name: Property.ShortText({
description: 'The new name of the card',
displayName: 'Card Name',
required: false,
}),
description: Property.LongText({
description: 'The new description of the card',
displayName: 'Card Description',
required: false,
}),
board_id: trelloCommon.board_id_opt,
list_id: trelloCommon.list_id_opt,
position: Property.StaticDropdown({
description: 'Move the card to a new position',
displayName: 'Position',
required: false,
options: {
options: [
{ label: 'Top', value: 'top' },
{ label: 'Bottom', value: 'bottom' },
],
},
}),
labels: trelloCommon.board_labels,
closed: Property.Checkbox({
description: 'Archive or unarchive the card',
displayName: 'Archived',
required: false,
}),
due: Property.DateTime({
description: 'Set a due date for the card',
displayName: 'Due Date',
required: false,
}),
},
async run(context) {
const body: any = {};
if (context.propsValue['name']) {
body.name = context.propsValue['name'];
}
if (context.propsValue['description']) {
body.desc = context.propsValue['description'];
}
if (context.propsValue['list_id']) {
body.idList = context.propsValue['list_id'];
}
if (context.propsValue['position']) {
body.pos = context.propsValue['position'];
}
if (context.propsValue['labels']) {
body.idLabels = context.propsValue['labels'];
}
if (context.propsValue['closed'] !== undefined) {
body.closed = context.propsValue['closed'];
}
if (context.propsValue['due']) {
body.due = context.propsValue['due'];
}
const request: HttpRequest = {
method: HttpMethod.PUT,
url:
`${trelloCommon.baseUrl}cards/${context.propsValue['card_id']}` +
`?key=` +
context.auth.username +
`&token=` +
context.auth.password,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body,
queryParams: {},
};
const response = await httpClient.sendRequest<TrelloCard>(request);
return response.body;
},
});

View File

@@ -0,0 +1,333 @@
import { BasicAuthPropertyValue, Property } from '@activepieces/pieces-framework';
import { httpClient, HttpRequest, HttpMethod } from '@activepieces/pieces-common';
import { trelloAuth } from '../..';
export interface WebhookInformation {
id: string;
description: string;
idModel: string;
callbackURL: string;
active: boolean;
consecutiveFailures: number;
firstConsecutiveFailDate: string;
}
export const trelloCommon = {
baseUrl: 'https://api.trello.com/1/',
board_id: Property.Dropdown({
auth: trelloAuth,
displayName: 'Boards',
description: 'List of boards',
required: true,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'connect your account first',
options: [],
};
}
const basicAuthProperty = auth as BasicAuthPropertyValue;
const user = await getAuthorisedUser(basicAuthProperty.username, basicAuthProperty.password);
const boards = await listBoards(
basicAuthProperty.username,
basicAuthProperty.password,
user['id'],
);
return {
options: boards.map((board: { id: string; name: string }) => ({
value: board.id,
label: board.name,
})),
};
},
}),
list_id: Property.Dropdown({
auth: trelloAuth,
displayName: 'Lists',
description: 'Get lists from a board',
required: true,
refreshers: ['board_id'],
options: async ({ auth, board_id }) => {
if (!auth || !board_id) {
return {
disabled: true,
placeholder: 'connect your account first and select a board',
options: [],
};
}
const basicAuthProperty = auth as BasicAuthPropertyValue;
const lists = await listBoardLists(
basicAuthProperty.username,
basicAuthProperty.password,
board_id as string,
);
return {
options: lists.map((list: { id: string; name: string }) => ({
value: list.id,
label: list.name,
})),
};
},
}),
list_id_opt: Property.Dropdown({
auth: trelloAuth,
displayName: 'Lists',
description: 'Get lists from a board',
required: false,
refreshers: ['board_id'],
options: async ({ auth, board_id }) => {
if (!auth || !board_id) {
return {
disabled: true,
placeholder: 'connect your account first and select a board',
options: [],
};
}
const basicAuthProperty = auth as BasicAuthPropertyValue;
const lists = await listBoardLists(
basicAuthProperty.username,
basicAuthProperty.password,
board_id as string,
);
return {
options: lists.map((list: { id: string; name: string }) => ({
value: list.id,
label: list.name,
})),
};
},
}),
board_id_opt: Property.Dropdown({
auth: trelloAuth,
displayName: 'Boards',
description: 'List of boards',
required: false,
refreshers: [],
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
placeholder: 'connect your account first',
options: [],
};
}
const basicAuthProperty = auth as BasicAuthPropertyValue;
const user = await getAuthorisedUser(basicAuthProperty.username, basicAuthProperty.password);
const boards = await listBoards(
basicAuthProperty.username,
basicAuthProperty.password,
user['id'],
);
return {
options: boards.map((board: { id: string; name: string }) => ({
value: board.id,
label: board.name,
})),
};
},
}),
board_labels: Property.MultiSelectDropdown({
auth: trelloAuth,
displayName: 'Labels',
description: 'Assign labels to the card',
required: false,
refreshers: ['board_id'],
options: async ({ auth, board_id }) => {
if (!auth || !board_id) {
return {
disabled: true,
placeholder: 'connect your account first and select a board',
options: [],
};
}
const basicAuthProperty = auth as BasicAuthPropertyValue;
const labels = await listBoardLabels(
basicAuthProperty.username,
basicAuthProperty.password,
board_id as string,
);
return {
options: labels.map((label: { id: string; name: string; color: string }) => ({
label: label.name || label.color,
value: label.id,
})),
};
},
}),
create_webhook: async (auth: BasicAuthPropertyValue, list_id: string, webhookUrl: string) => {
const request: HttpRequest = {
method: HttpMethod.POST,
url:
`${trelloCommon.baseUrl}webhooks` +
`?key=` +
auth.username +
`&token=` +
auth.password +
`&callbackURL=` +
webhookUrl +
`&idModel=` +
list_id,
};
const response = await httpClient.sendRequest<WebhookInformation>(request);
return response.body;
},
delete_webhook: async (auth: BasicAuthPropertyValue, webhook_id: string) => {
const request: HttpRequest = {
method: HttpMethod.DELETE,
url:
`${trelloCommon.baseUrl}webhooks/${webhook_id}` +
`?key=` +
auth.username +
`&token=` +
auth.password,
};
const response = await httpClient.sendRequest(request);
return response.body;
},
list_webhooks: async (auth: BasicAuthPropertyValue) => {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}tokens/${auth.password}/webhooks` + `?key=` + auth.username,
};
const response = await httpClient.sendRequest<WebhookInformation[]>(request);
return response.body;
},
};
/**
* Gets the authenticated user via API and token
* @param apikey API Key
* @param token Token Key
* @returns JSON containing Trello user
*/
async function getAuthorisedUser(apikey: string, token: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}members/me` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest(request);
return response.body;
}
/**
* Lists all boards a member has access to in Trello
* @param apikey API Key
* @param token API Token
* @param user_id ID of the user
* @returns JSON Array of boards user has access to
*/
async function listBoards(apikey: string, token: string, user_id: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}members/${user_id}/boards` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest<{ id: string; name: string }[]>(request);
return response.body;
}
/**
* Gets all the lists inside of a board
* @param apikey API Key
* @param token API Token
* @param board_id Board to fetch lists from
* @returns JSON Array of lists
*/
async function listBoardLists(apikey: string, token: string, board_id: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}boards/${board_id}/lists` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest<{ id: string; name: string }[]>(request);
return response.body;
}
/**
* Gets all the labels of a board
* @param apikey API Key
* @param token API Token
* @param board_id Board to fetch labels from
* @returns JSON Array of labels
*/
async function listBoardLabels(apikey: string, token: string, board_id: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}boards/${board_id}/labels` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest<{ id: string; name: string; color: string }[]>(
request,
);
return response.body;
}
export async function getCardDetail(apikey: string, token: string, card_id: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}cards/${card_id}` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest(request);
return response.body;
}
export async function getCardsInBoard(apikey: string, token: string, board_id: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}boards/${board_id}/cards` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest(request);
return response.body;
}
export async function getCardsInList(apikey: string, token: string, list_id: string) {
const request: HttpRequest = {
method: HttpMethod.GET,
url: `${trelloCommon.baseUrl}lists/${list_id}/cards` + `?key=` + apikey + `&token=` + token,
headers: {
Accept: 'application/json',
},
};
const response = await httpClient.sendRequest(request);
return response.body;
}

View File

@@ -0,0 +1,113 @@
export type TrelloCard = {
id: string;
address: string;
badges: {
attachmentsByType: {
trello: {
board: number;
card: number;
};
};
location: boolean;
votes: number;
viewingMemberVoted: boolean;
subscribed: boolean;
fogbugz: string;
checkItems: number;
checkItemsChecked: number;
comments: number;
attachments: number;
description: boolean;
due: string;
start: string;
dueComplete: boolean;
};
checkItemStates: string[];
closed: boolean;
coordinates: string;
creationMethod: string;
dateLastActivity: string;
desc: string;
due: string;
dueReminder: string;
email: string;
idBoard: string;
idChecklists: { id: string }[];
idLabels: {
id: string;
idBoard: string;
name: string;
color: string;
}[];
idList: string;
idMembers: string[];
idMembersVoted: string[];
idShort: number;
labels: string[];
locationName: string;
manualCoverAttachment: boolean;
name: string;
pos: number;
shortLink: string;
shortUrl: string;
subscribed: boolean;
url: string;
};
export type TrelloCardMoved = {
action: {
display: {
translationKey: string;
entities: {
card: {
type: string;
idList: string;
id: string;
shortLink: string;
text: string;
};
listBefore: {
type: string;
id: string;
text: string;
};
listAfter: {
type: string;
id: string;
text: string;
};
memberCreator: {
type: string;
id: string;
username: string;
text: string;
};
};
};
};
};
export type TrelloNewCard = {
action: {
display: {
translationKey: string;
entities: {
card: {
type: string;
id: string;
shortLink: string;
text: string;
};
list: {
type: string;
id: string;
text: string;
};
memberCreator: {
type: string;
id: string;
username: string;
text: string;
};
};
};
};
};

View File

@@ -0,0 +1,59 @@
---
title: 'Trello'
---
## Creating your first Trello card using Activepiece
1. Create a new collection
2. Select trigger as 'schedule' and we will use its default value of 5 minutes
3. Click on + to add a new piece
4. Select the 'Trello' piece
5. Select the 'Create Card' Action on the right-hand sidebar
6. Select your Trello API Key connection you created above
7. Select your Trello Token Key connection above
8. Head over to the Trello board you wish to create a new card in
9. Create a new card, lets call it 'test'
10. Click into that card
11. In the URL, add '.json', this should return a wall of JSON text
12. Look for a value called 'idList', it should look something like this: `"idList":"5aea17e911c71fee96375d94"`
13. Copy the idList value, in our case `5aea17e911c71fee96375d94` and enter it into the idList field
14. Set the card name you'd like to create
15. Set a description to enter into the card (optional)
16. Lastly, lets test our flow by clicking 'Test Flow'
17. A new card should have been created in the selected list
18. Now click publish, and thats it!
---
---
## Fetching a card via Activepieces
1. Create a new collection
2. Select trigger as 'schedule' and we will use its default value of 5 minutes
3. Click on + to add a new piece
4. Select the 'Trello' piece
5. Select the 'Get Card' Action on the right-hand sidebar
6. Select your Trello API Key connection you created above
7. Select your Trello Token Key connection above
8. Head over to the Trello board you wish to create a new card in
9. Create a new card, lets call it 'test'
10. Click into that card
11. In the URL, add '.json', this should return a wall of JSON text
12. Look for a value called 'id', it should look something like this: `"id":"5aea17e911c71fee96375d94"`
13. Copy the idList value, in our case `5aea17e911c71fee96375d94` and enter it into the idList field
14. Lastly, lets test our flow by clicking 'Test Flow'
15. A new card should have been created in the selected list
16. Now click publish, and thats it!
---
## Triggers
TRIGGERS
---
## Actions
ACTIONS

View File

@@ -0,0 +1,152 @@
import { trelloAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { getCardDetail, getCardsInList, trelloCommon } from '../common';
import { TrelloCardMoved } from '../common/props/card';
import { isNil, WebhookHandshakeStrategy } from '@activepieces/shared';
export const cardMovedTrigger = createTrigger({
auth: trelloAuth,
name: 'card_moved_to_list',
displayName: 'Card Moved to list',
description: 'Trigger when a card is moved to the list specified',
props: {
board_id: trelloCommon.board_id,
list_id: trelloCommon.list_id,
},
type: TriggerStrategy.WEBHOOK,
handshakeConfiguration:{
strategy:WebhookHandshakeStrategy.NONE
},
async onHandshake(context)
{
return{
status:200
}
},
async onEnable(context) {
const element_id = context.propsValue.list_id;
const webhooks = await trelloCommon.list_webhooks(context.auth);
const webhook = webhooks.find(
(webhook) => webhook.idModel === element_id && webhook.callbackURL === context.webhookUrl,
);
if (webhook) {
context.webhookUrl = webhook.callbackURL;
return;
}
const response = await trelloCommon.create_webhook(
context.auth,
element_id,
context.webhookUrl,
);
await context.store.put('webhook_id', response.id);
},
async onDisable(context) {
const webhook_id = (await context.store.get('webhook_id')) as string;
if (isNil(webhook_id)) {
return;
}
const webhooks = await trelloCommon.list_webhooks(context.auth);
const webhook = webhooks.find((webhook) => webhook.callbackURL === context.webhookUrl);
if (!webhook) {
return;
}
await trelloCommon.delete_webhook(context.auth, webhook_id);
},
async run(context) {
const response = context.payload.body as TrelloCardMoved;
const response_body = response.action.display;
if (response.action.display.translationKey !== 'action_move_card_from_list_to_list') {
return [];
}
if (response_body.entities.listAfter.id !== context.propsValue.list_id) {
return [];
}
if (response_body.entities.listBefore.id === context.propsValue.list_id) {
return [];
}
const card = await getCardDetail(
context.auth.username,
context.auth.password,
response_body.entities.card.id,
);
return [card];
},
async test(context) {
let cards: Array<Record<string, unknown>> = [];
try {
cards = await getCardsInList(
context.auth.username,
context.auth.password,
context.propsValue.list_id,
);
cards.sort(
(a: any, b: any) =>
new Date(b.dateLastActivity).getTime() - new Date(a.dateLastActivity).getTime(),
);
return cards.slice(0, 5);
} catch (error) {
console.error('An error occurred:', error);
return [];
}
},
sampleData: {
id: '6651d6d6298164adb4a598b6',
badges: {
attachmentsByType: { trello: { board: 0, card: 0 } },
externalSource: null,
location: false,
votes: 0,
viewingMemberVoted: false,
subscribed: false,
attachments: 0,
fogbugz: '',
checkItems: 0,
checkItemsChecked: 0,
checkItemsEarliestDue: null,
comments: 0,
description: false,
due: null,
dueComplete: false,
lastUpdatedByAi: false,
start: null,
},
checkItemStates: [],
closed: false,
dueComplete: false,
dateLastActivity: '2024-05-25T12:17:26.372Z',
desc: '',
descData: { emoji: {} },
due: null,
dueReminder: null,
email: null,
idBoard: '6639c3a2f9a2ecd2b53adcc4',
idChecklists: [],
idList: '6639c3a342f39d7f6ff9e9b0',
idMembers: [],
idMembersVoted: [],
idShort: 11,
idAttachmentCover: null,
labels: [],
idLabels: [],
manualCoverAttachment: false,
name: 'TEST CARDS',
pos: 196608,
shortLink: '57tgmppm',
shortUrl: 'https://trello.com/c/57tghpk',
start: null,
subscribed: false,
url: 'https://trello.com/c/57tkkppm/11-again-cards',
cover: {
idAttachment: null,
color: null,
idUploadedBackground: null,
size: 'normal',
brightness: 'dark',
idPlugin: null,
},
isTemplate: false,
cardRole: null,
},
});

View File

@@ -0,0 +1,84 @@
import { trelloAuth } from '../..';
import { TriggerStrategy, createTrigger, PiecePropValueSchema, Property, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
import dayjs from 'dayjs';
import { trelloCommon, getCardsInBoard, getCardsInList } from '../common';
interface Props {
board_id: string;
list_id_opt?: string;
time_before_due: number;
time_unit: string;
}
const polling: Polling<AppConnectionValueForAuthProperty<typeof trelloAuth>, Props> = {
strategy: DedupeStrategy.TIMEBASED,
async items({ auth, propsValue, lastFetchEpochMS }) {
const { board_id, list_id_opt, time_before_due, time_unit } = propsValue;
const getCards = list_id_opt ? getCardsInList : getCardsInBoard;
const cards: any[] = await getCards(auth.username, auth.password, list_id_opt || board_id);
if(lastFetchEpochMS ===0)
{
// If lastFetchEpochMS is 0, we assume this is the test run and return all cards with due dates
return cards
.filter(card => card.due && !card.dueComplete)
.map(card => ({
epochMilliSeconds: dayjs(card.due).valueOf(),
data: card,
}));
}
const now = dayjs();
const upcoming = now.add(time_before_due, time_unit as dayjs.ManipulateType);
return cards
.filter(card => card.due && !card.dueComplete && dayjs(card.due).isAfter(now) && dayjs(card.due).isBefore(upcoming) && dayjs(card.due).valueOf() > lastFetchEpochMS)
.map(card => ({
epochMilliSeconds: dayjs(card.due).valueOf(),
data: card,
}));
},
};
export const deadlineTrigger = createTrigger({
auth: trelloAuth,
name: 'deadline',
displayName: 'Card Deadline',
description: 'Triggers at a specified time before a card deadline.',
type: TriggerStrategy.POLLING,
props: {
board_id: trelloCommon.board_id,
list_id_opt: trelloCommon.list_id_opt,
time_unit: Property.StaticDropdown({
displayName: 'Time unit',
description: 'Select unit for time before due',
required: true,
options: {
options: [
{ label: 'Minutes', value: 'minutes' },
{ label: 'Hours', value: 'hours' },
],
},
defaultValue: 'hours',
}),
time_before_due: Property.Number({
displayName: 'Time before due',
description: 'How long before the due date the trigger should run (use with time unit)',
required: true,
defaultValue: 24,
}),
},
async onEnable(context) {
await pollingHelper.onEnable(polling, context);
},
async onDisable(context) {
await pollingHelper.onDisable(polling, context);
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
async test(context) {
return await pollingHelper.test(polling, context);
},
sampleData: undefined,
});

View File

@@ -0,0 +1,153 @@
import { trelloAuth } from '../..';
import { TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
import { getCardDetail, getCardsInBoard, getCardsInList, trelloCommon } from '../common';
import { TrelloNewCard } from '../common/props/card';
import { isNil, WebhookHandshakeStrategy } from '@activepieces/shared';
export const newCardTrigger = createTrigger({
auth: trelloAuth,
name: 'new_card',
displayName: 'New Card',
description: 'Trigger when a new card is created',
props: {
board_id: trelloCommon.board_id,
list_id_opt: trelloCommon.list_id_opt,
},
type: TriggerStrategy.WEBHOOK,
handshakeConfiguration:{
strategy:WebhookHandshakeStrategy.NONE
},
async onHandshake(context)
{
return{
status:200
}
},
async onEnable(context) {
const element_id = context.propsValue.list_id_opt || context.propsValue.board_id;
const webhooks = await trelloCommon.list_webhooks(context.auth);
const webhook = webhooks.find(
(webhook) => webhook.idModel === element_id && webhook.callbackURL === context.webhookUrl,
);
if (webhook) {
context.webhookUrl = webhook.callbackURL;
return;
}
const response = await trelloCommon.create_webhook(
context.auth,
element_id,
context.webhookUrl,
);
await context.store.put('webhook_id', response.id);
},
async onDisable(context) {
const webhook_id = (await context.store.get('webhook_id')) as string;
if (isNil(webhook_id)) {
return;
}
const webhooks = await trelloCommon.list_webhooks(context.auth);
const webhook = webhooks.find((webhook) => webhook.callbackURL === context.webhookUrl);
if (!webhook) {
return;
}
await trelloCommon.delete_webhook(context.auth, webhook_id);
},
async run(context) {
const body = context.payload.body as TrelloNewCard;
if (body.action.display.translationKey !== 'action_create_card') {
return [];
}
if (context.propsValue.list_id_opt) {
if (body.action.display.entities.list.id !== context.propsValue.list_id_opt) {
return [];
}
}
const card = await getCardDetail(
context.auth.username,
context.auth.password,
body.action.display.entities.card.id,
);
return [card];
},
async test(context) {
let cards: Array<Record<string, unknown>> = [];
try {
const getListFunction = context.propsValue.list_id_opt ? getCardsInList : getCardsInBoard;
cards = await getListFunction(
context.auth.username,
context.auth.password,
context.propsValue.list_id_opt || context.propsValue.board_id,
);
cards.sort(
(a: any, b: any) =>
new Date(b.dateLastActivity).getTime() - new Date(a.dateLastActivity).getTime(),
);
return cards.slice(0, 5);
} catch (error) {
console.error('An error occurred:', error);
return [];
}
},
sampleData: {
id: '6651d6d6298164adb4a598b6',
badges: {
attachmentsByType: { trello: { board: 0, card: 0 } },
externalSource: null,
location: false,
votes: 0,
viewingMemberVoted: false,
subscribed: false,
attachments: 0,
fogbugz: '',
checkItems: 0,
checkItemsChecked: 0,
checkItemsEarliestDue: null,
comments: 0,
description: false,
due: null,
dueComplete: false,
lastUpdatedByAi: false,
start: null,
},
checkItemStates: [],
closed: false,
dueComplete: false,
dateLastActivity: '2024-05-25T12:17:26.372Z',
desc: '',
descData: { emoji: {} },
due: null,
dueReminder: null,
email: null,
idBoard: '6639c3a2f9a2ecd2b53adcc4',
idChecklists: [],
idList: '6639c3a342f39d7f6ff9e9b0',
idMembers: [],
idMembersVoted: [],
idShort: 11,
idAttachmentCover: null,
labels: [],
idLabels: [],
manualCoverAttachment: false,
name: 'TEST CARDS',
pos: 196608,
shortLink: '57tgmppm',
shortUrl: 'https://trello.com/c/57tghpk',
start: null,
subscribed: false,
url: 'https://trello.com/c/57tkkppm/11-again-cards',
cover: {
idAttachment: null,
color: null,
idUploadedBackground: null,
size: 'normal',
brightness: 'dark',
idPlugin: null,
},
isTemplate: false,
cardRole: null,
},
});