Add Activepieces integration for workflow automation
- Add Activepieces fork with SmoothSchedule custom piece - Create integrations app with Activepieces service layer - Add embed token endpoint for iframe integration - Create Automations page with embedded workflow builder - Add sidebar visibility fix for embed mode - Add list inactive customers endpoint to Public API - Include SmoothSchedule triggers: event created/updated/cancelled - Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "Sie können API-Schlüssel unter [API-Einstellungen](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Aufgabe erstellen",
|
||||
"Update Task": "Aufgabe aktualisieren",
|
||||
"Create Project": "Projekt erstellen",
|
||||
"Get Task": "Aufgabe abrufen",
|
||||
"Move Task": "Aufgabe verschieben",
|
||||
"Find Task": "Aufgabe finden",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Creates a new task.": "Erstellt eine neue Aufgabe.",
|
||||
"Update an existing task in Motion": "Bestehende Aufgabe in Bewegung aktualisieren",
|
||||
"Create a new project in Motion": "Neues Projekt in Bewegung erstellen",
|
||||
"Get details of a specific task by ID.": "Erhalten Sie Details zu einer bestimmten Aufgabe per ID.",
|
||||
"Moves a task to a different workspace.": "Verschiebt eine Aufgabe in einen anderen Arbeitsbereich.",
|
||||
"Finds an existing task.": "Findet eine existierende Aufgabe.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Workspace ID": "Arbeitsbereich-ID",
|
||||
"Task Name": "Aufgabenname",
|
||||
"Description": "Beschreibung",
|
||||
"Due Date": "Fälligkeitsdatum",
|
||||
"Duration": "Dauer",
|
||||
"Status": "Status",
|
||||
"Priority": "Priorität",
|
||||
"Project": "Projekt",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Etiketten",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Projekt Name",
|
||||
"Current Workspace": "Aktueller Arbeitsbereich",
|
||||
"Target Workspace": "Zielarbeitsbereich",
|
||||
"Include All Statuses": "Alle Status einbeziehen",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopfzeilen",
|
||||
"Query Parameters": "Abfrageparameter",
|
||||
"Body": "Körper",
|
||||
"Response is Binary ?": "Antwort ist binär?",
|
||||
"No Error on Failure": "Kein Fehler bei Fehler",
|
||||
"Timeout (in seconds)": "Timeout (in Sekunden)",
|
||||
"Duration in minutes.": "Dauer in Minuten.",
|
||||
"The names of the labels to be added to the task.": "Die Namen der Labels, die der Aufgabe hinzugefügt werden sollen.",
|
||||
"The names of the labels to be added to the task": "Die Namen der Labels, die der Aufgabe hinzugefügt werden sollen",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Enddatum des Projekts",
|
||||
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
|
||||
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
|
||||
"ASAP": "ASAP",
|
||||
"HIGH": "HOCH",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "NACH",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"Task Created": "Aufgabe erstellt",
|
||||
"Triggers when a new task is created.": "Wird ausgelöst, wenn eine neue Aufgabe erstellt wird."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "Puedes obtener la clave API de [Configuración API](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Crear tarea",
|
||||
"Update Task": "Actualizar tarea",
|
||||
"Create Project": "Crear proyecto",
|
||||
"Get Task": "Obtener tarea",
|
||||
"Move Task": "Mover tarea",
|
||||
"Find Task": "Buscar tarea",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Creates a new task.": "Crea una nueva tarea.",
|
||||
"Update an existing task in Motion": "Actualizar una tarea existente en movimiento",
|
||||
"Create a new project in Motion": "Crear un nuevo proyecto en movimiento",
|
||||
"Get details of a specific task by ID.": "Obtener detalles de una tarea específica por ID.",
|
||||
"Moves a task to a different workspace.": "Mueve una tarea a un espacio de trabajo diferente.",
|
||||
"Finds an existing task.": "Encuentra una tarea existente.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Workspace ID": "ID del área de trabajo",
|
||||
"Task Name": "Nombre de tarea",
|
||||
"Description": "Descripción",
|
||||
"Due Date": "Fecha de fin",
|
||||
"Duration": "Duración",
|
||||
"Status": "Estado",
|
||||
"Priority": "Prioridad",
|
||||
"Project": "Projekt",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Etiquetas",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Nombre del proyecto",
|
||||
"Current Workspace": "Espacio de trabajo actual",
|
||||
"Target Workspace": "Espacio de trabajo objetivo",
|
||||
"Include All Statuses": "Incluye todos los estados",
|
||||
"Method": "Método",
|
||||
"Headers": "Encabezados",
|
||||
"Query Parameters": "Parámetros de consulta",
|
||||
"Body": "Cuerpo",
|
||||
"Response is Binary ?": "¿Respuesta es binaria?",
|
||||
"No Error on Failure": "No hay ningún error en fallo",
|
||||
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
|
||||
"Duration in minutes.": "Duración en minutos.",
|
||||
"The names of the labels to be added to the task.": "Los nombres de las etiquetas que se añadirán a la tarea.",
|
||||
"The names of the labels to be added to the task": "Los nombres de las etiquetas a añadir a la tarea",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Fecha de vencimiento del proyecto",
|
||||
"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.",
|
||||
"ASAP": "ASAP",
|
||||
"HIGH": "ALTA",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "MÁS",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"Task Created": "Tarea creada",
|
||||
"Triggers when a new task is created.": "Se activa cuando se crea una nueva tarea."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "Vous pouvez obtenir la clé API depuis [API Settings](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Créer une tâche",
|
||||
"Update Task": "Tâche de mise à jour",
|
||||
"Create Project": "Créer un projet",
|
||||
"Get Task": "Obtenir une tâche",
|
||||
"Move Task": "Déplacer la tâche",
|
||||
"Find Task": "Trouver une tâche",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Creates a new task.": "Crée une nouvelle tâche.",
|
||||
"Update an existing task in Motion": "Mettre à jour une tâche existante en Mouvement",
|
||||
"Create a new project in Motion": "Créer un nouveau projet en Mouvement",
|
||||
"Get details of a specific task by ID.": "Obtenir les détails d'une tâche spécifique par ID.",
|
||||
"Moves a task to a different workspace.": "Déplace une tâche vers un autre espace de travail.",
|
||||
"Finds an existing task.": "Trouve une tâche existante.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Workspace ID": "ID de l'espace de travail",
|
||||
"Task Name": "Nom de la tâche",
|
||||
"Description": "Libellé",
|
||||
"Due Date": "Date de fin",
|
||||
"Duration": "Durée",
|
||||
"Status": "Statut",
|
||||
"Priority": "Priorité",
|
||||
"Project": "Projet",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Étiquettes",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Project Name",
|
||||
"Current Workspace": "Espace de travail actuel",
|
||||
"Target Workspace": "Espace de travail cible",
|
||||
"Include All Statuses": "Inclure tous les statuts",
|
||||
"Method": "Méthode",
|
||||
"Headers": "En-têtes",
|
||||
"Query Parameters": "Paramètres de requête",
|
||||
"Body": "Corps",
|
||||
"Response is Binary ?": "La réponse est Binaire ?",
|
||||
"No Error on Failure": "Aucune erreur en cas d'échec",
|
||||
"Timeout (in seconds)": "Délai d'attente (en secondes)",
|
||||
"Duration in minutes.": "Durée en minutes.",
|
||||
"The names of the labels to be added to the task.": "Les noms des étiquettes à ajouter à la tâche.",
|
||||
"The names of the labels to be added to the task": "Les noms des étiquettes à ajouter à la tâche",
|
||||
"ISO 8601 Due date on the project": "Date d'échéance ISO 8601 sur le projet",
|
||||
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
|
||||
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
|
||||
"ASAP": "Le plus vite possible",
|
||||
"HIGH": "HAUT",
|
||||
"MEDIUM": "MOYEN",
|
||||
"LOW": "FAIBLE",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "HEAD",
|
||||
"Task Created": "Tâche créée",
|
||||
"Triggers when a new task is created.": "Déclenche quand une nouvelle tâche est créée."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "[API 設定](https://app.usemotion.com/web/settings/api)からAPIキーを取得できます。",
|
||||
"Create Task": "タスクを作成",
|
||||
"Update Task": "タスクの更新",
|
||||
"Create Project": "プロジェクトを作成",
|
||||
"Get Task": "タスクを取得",
|
||||
"Move Task": "タスクを移動",
|
||||
"Find Task": "タスクを検索",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Creates a new task.": "新しいタスクを作成します。",
|
||||
"Update an existing task in Motion": "モーションで既存のタスクを更新",
|
||||
"Create a new project in Motion": "Motion で新しいプロジェクトを作成",
|
||||
"Get details of a specific task by ID.": "ID で特定のタスクの詳細を取得します。",
|
||||
"Moves a task to a different workspace.": "タスクを別のワークスペースに移動します。",
|
||||
"Finds an existing task.": "既存のタスクを検索します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Workspace ID": "ワークスペース ID",
|
||||
"Task Name": "タスク名",
|
||||
"Description": "説明",
|
||||
"Due Date": "締切日",
|
||||
"Duration": "期間",
|
||||
"Status": "Status",
|
||||
"Priority": "優先度",
|
||||
"Project": "プロジェクト",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "ラベル",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "プロジェクト名",
|
||||
"Current Workspace": "現在のワークスペース",
|
||||
"Target Workspace": "ターゲットワークスペース",
|
||||
"Include All Statuses": "すべてのステータスを含める",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"Duration in minutes.": "分単位での継続時間",
|
||||
"The names of the labels to be added to the task.": "タスクに追加するラベルの名前。",
|
||||
"The names of the labels to be added to the task": "タスクに追加するラベルの名前",
|
||||
"ISO 8601 Due date on the project": "プロジェクトの ISO 8601 締切日",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"ASAP": "できるだけ早く。",
|
||||
"HIGH": "高い",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "低い",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"Task Created": "タスクが作成されました",
|
||||
"Triggers when a new task is created.": "新しいタスクが作成されたときにトリガーされます。"
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "U kunt API-sleutel verkrijgen via [API-instellingen](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Taak maken",
|
||||
"Update Task": "Taak bijwerken",
|
||||
"Create Project": "Project aanmaken",
|
||||
"Get Task": "Ophalen taak",
|
||||
"Move Task": "Verplaats taak",
|
||||
"Find Task": "Zoek Taak",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new task.": "Maakt een nieuwe taak aan.",
|
||||
"Update an existing task in Motion": "Een bestaande taak in Beweging bijwerken",
|
||||
"Create a new project in Motion": "Maak een nieuw project aan in Beweging",
|
||||
"Get details of a specific task by ID.": "Krijg details van een specifieke taak via ID.",
|
||||
"Moves a task to a different workspace.": "Verplaatst een taak naar een andere werkruimte.",
|
||||
"Finds an existing task.": "Een bestaande taak vinden.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Workspace ID": "Werkruimte ID",
|
||||
"Task Name": "Taak naam",
|
||||
"Description": "Beschrijving",
|
||||
"Due Date": "Inleverdatum",
|
||||
"Duration": "Tijdsduur",
|
||||
"Status": "status",
|
||||
"Priority": "Prioriteit",
|
||||
"Project": "Project",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Labels",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Projectnaam",
|
||||
"Current Workspace": "Huidige werkruimte",
|
||||
"Target Workspace": "Doel werkruimte",
|
||||
"Include All Statuses": "Alle statussen meenemen",
|
||||
"Method": "Methode",
|
||||
"Headers": "Kopteksten",
|
||||
"Query Parameters": "Query parameters",
|
||||
"Body": "Lichaam",
|
||||
"Response is Binary ?": "Antwoord is binair?",
|
||||
"No Error on Failure": "Geen fout bij fout",
|
||||
"Timeout (in seconds)": "Time-out (in seconden)",
|
||||
"Duration in minutes.": "Duur in minuten.",
|
||||
"The names of the labels to be added to the task.": "De namen van de labels die aan de taak moeten worden toegevoegd.",
|
||||
"The names of the labels to be added to the task": "De namen van de labels die aan de taak moeten worden toegevoegd",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Vervaldatum op het project",
|
||||
"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..",
|
||||
"ASAP": "OPSLAG",
|
||||
"HIGH": "HOOG",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "LAAG",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"Task Created": "Taak aangemaakt",
|
||||
"Triggers when a new task is created.": "Triggert wanneer een nieuwe taak is aangemaakt."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "Você pode obter chave de API em [Configurações da API](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Criar tarefa",
|
||||
"Update Task": "Atualizar Tarefa",
|
||||
"Create Project": "Criar Projeto",
|
||||
"Get Task": "Obter Tarefa",
|
||||
"Move Task": "Mover tarefa",
|
||||
"Find Task": "Procurar Tarefa",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Creates a new task.": "Cria uma nova tarefa.",
|
||||
"Update an existing task in Motion": "Atualizar uma tarefa existente em Movimento",
|
||||
"Create a new project in Motion": "Criar um novo projeto em Movimento",
|
||||
"Get details of a specific task by ID.": "Obtenha detalhes de uma tarefa específica por ID.",
|
||||
"Moves a task to a different workspace.": "Move a tarefa para um espaço de trabalho diferente.",
|
||||
"Finds an existing task.": "Encontra uma tarefa existente.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Workspace ID": "ID do workspace",
|
||||
"Task Name": "Nome da tarefa",
|
||||
"Description": "Descrição",
|
||||
"Due Date": "Data de vencimento",
|
||||
"Duration": "Duração",
|
||||
"Status": "Estado",
|
||||
"Priority": "Prioridade",
|
||||
"Project": "Projecto",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Marcadores",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Nome do Projeto",
|
||||
"Current Workspace": "Projeto atual",
|
||||
"Target Workspace": "Workspace alvo",
|
||||
"Include All Statuses": "Incluir todos os status",
|
||||
"Method": "Método",
|
||||
"Headers": "Cabeçalhos",
|
||||
"Query Parameters": "Parâmetros da consulta",
|
||||
"Body": "Conteúdo",
|
||||
"Response is Binary ?": "A resposta é binária ?",
|
||||
"No Error on Failure": "Nenhum erro no Failure",
|
||||
"Timeout (in seconds)": "Tempo limite (em segundos)",
|
||||
"Duration in minutes.": "Duração em minutos.",
|
||||
"The names of the labels to be added to the task.": "Os nomes das etiquetas a serem adicionadas à tarefa.",
|
||||
"The names of the labels to be added to the task": "Os nomes das etiquetas a serem adicionadas à tarefa",
|
||||
"ISO 8601 Due date on the project": "Data limite para ISO 8601 no projeto",
|
||||
"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..",
|
||||
"ASAP": "ASAP",
|
||||
"HIGH": "ALTO",
|
||||
"MEDIUM": "MÉDIO",
|
||||
"LOW": "BAIXA",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"Task Created": "Tarefa criada",
|
||||
"Triggers when a new task is created.": "Dispara quando uma nova tarefa é criada."
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"Motion": "Движение",
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "Вы можете получить ключ API в [Настройках API](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Создать задачу",
|
||||
"Update Task": "Обновить задачу",
|
||||
"Create Project": "Создать проект",
|
||||
"Get Task": "Получить задачу",
|
||||
"Move Task": "Переместить задачу",
|
||||
"Find Task": "Найти задачу",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Creates a new task.": "Создает новую задачу.",
|
||||
"Update an existing task in Motion": "Обновить существующую задачу в движении",
|
||||
"Create a new project in Motion": "Создать новый проект в движении",
|
||||
"Get details of a specific task by ID.": "Получить подробную информацию о конкретной задаче по ID.",
|
||||
"Moves a task to a different workspace.": "Перемещает задачу в другую рабочую область.",
|
||||
"Finds an existing task.": "Находит существующую задачу.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Workspace ID": "ID проекта",
|
||||
"Task Name": "Название задачи",
|
||||
"Description": "Описание",
|
||||
"Due Date": "Срок сдачи",
|
||||
"Duration": "Duration",
|
||||
"Status": "Status",
|
||||
"Priority": "Приоритет",
|
||||
"Project": "Проект",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Метки",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Название проекта",
|
||||
"Current Workspace": "Текущий проект",
|
||||
"Target Workspace": "Целевая рабочая область",
|
||||
"Include All Statuses": "Включить все статусы",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"Duration in minutes.": "Продолжительность в считанные минуты.",
|
||||
"The names of the labels to be added to the task.": "Имена меток, которые будут добавлены в задачу.",
|
||||
"The names of the labels to be added to the task": "Имена меток, которые будут добавлены в задачу",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Дата окончания проекта",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"ASAP": "АСАП",
|
||||
"HIGH": "ВЫСОКОЕ",
|
||||
"MEDIUM": "СРЕДНИЙ",
|
||||
"LOW": "НИЗКИЙ",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"Task Created": "Задача создана",
|
||||
"Triggers when a new task is created.": "Триггеры при создании новой задачи."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Create Task",
|
||||
"Update Task": "Update Task",
|
||||
"Create Project": "Create Project",
|
||||
"Get Task": "Get Task",
|
||||
"Move Task": "Move Task",
|
||||
"Find Task": "Find Task",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new task.": "Creates a new task.",
|
||||
"Update an existing task in Motion": "Update an existing task in Motion",
|
||||
"Create a new project in Motion": "Create a new project in Motion",
|
||||
"Get details of a specific task by ID.": "Get details of a specific task by ID.",
|
||||
"Moves a task to a different workspace.": "Moves a task to a different workspace.",
|
||||
"Finds an existing task.": "Finds an existing task.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workspace ID": "Workspace ID",
|
||||
"Task Name": "Task Name",
|
||||
"Description": "Description",
|
||||
"Due Date": "Due Date",
|
||||
"Duration": "Duration",
|
||||
"Status": "Status",
|
||||
"Priority": "Priority",
|
||||
"Project": "Project",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Labels",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Project Name",
|
||||
"Current Workspace": "Current Workspace",
|
||||
"Target Workspace": "Target Workspace",
|
||||
"Include All Statuses": "Include All Statuses",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Duration in minutes.": "Duration in minutes.",
|
||||
"The names of the labels to be added to the task.": "The names of the labels to be added to the task.",
|
||||
"The names of the labels to be added to the task": "The names of the labels to be added to the task",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Due date on the project",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"ASAP": "ASAP",
|
||||
"HIGH": "HIGH",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "LOW",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"Task Created": "Task Created",
|
||||
"Triggers when a new task is created.": "Triggers when a new task is created."
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"Motion": "Motion",
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Create Task",
|
||||
"Update Task": "Update Task",
|
||||
"Create Project": "Create Project",
|
||||
"Get Task": "Get Task",
|
||||
"Move Task": "Move Task",
|
||||
"Find Task": "Find Task",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new task.": "Creates a new task.",
|
||||
"Update an existing task in Motion": "Update an existing task in Motion",
|
||||
"Create a new project in Motion": "Create a new project in Motion",
|
||||
"Get details of a specific task by ID.": "Get details of a specific task by ID.",
|
||||
"Moves a task to a different workspace.": "Moves a task to a different workspace.",
|
||||
"Finds an existing task.": "Finds an existing task.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Workspace ID": "Workspace ID",
|
||||
"Task Name": "Task Name",
|
||||
"Description": "Description",
|
||||
"Due Date": "Due Date",
|
||||
"Duration": "Duration",
|
||||
"Status": "Status",
|
||||
"Priority": "Priority",
|
||||
"Project": "Project",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Labels",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "Project Name",
|
||||
"Current Workspace": "Current Workspace",
|
||||
"Target Workspace": "Target Workspace",
|
||||
"Include All Statuses": "Include All Statuses",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"Duration in minutes.": "Duration in minutes.",
|
||||
"The names of the labels to be added to the task.": "The names of the labels to be added to the task.",
|
||||
"The names of the labels to be added to the task": "The names of the labels to be added to the task",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Due date on the project",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"ASAP": "ASAP",
|
||||
"HIGH": "HIGH",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "LOW",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"Task Created": "Task Created",
|
||||
"Triggers when a new task is created.": "Triggers when a new task is created."
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).": "You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).",
|
||||
"Create Task": "Create Task",
|
||||
"Update Task": "Update Task",
|
||||
"Create Project": "Create Project",
|
||||
"Get Task": "Get Task",
|
||||
"Move Task": "Move Task",
|
||||
"Find Task": "Find Task",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Creates a new task.": "Creates a new task.",
|
||||
"Update an existing task in Motion": "Update an existing task in Motion",
|
||||
"Create a new project in Motion": "Create a new project in Motion",
|
||||
"Get details of a specific task by ID.": "Get details of a specific task by ID.",
|
||||
"Moves a task to a different workspace.": "Moves a task to a different workspace.",
|
||||
"Finds an existing task.": "Finds an existing task.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Workspace ID": "Workspace ID",
|
||||
"Task Name": "Task Name",
|
||||
"Description": "描述",
|
||||
"Due Date": "Due Date",
|
||||
"Duration": "期限",
|
||||
"Status": "状态",
|
||||
"Priority": "Priority",
|
||||
"Project": "项目",
|
||||
"Assignee": "Assignee",
|
||||
"Labels": "Labels",
|
||||
"Task ID": "Task ID",
|
||||
"Project Name": "项目名称",
|
||||
"Current Workspace": "Current Workspace",
|
||||
"Target Workspace": "Target Workspace",
|
||||
"Include All Statuses": "Include All Statuses",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"Duration in minutes.": "Duration in minutes.",
|
||||
"The names of the labels to be added to the task.": "The names of the labels to be added to the task.",
|
||||
"The names of the labels to be added to the task": "The names of the labels to be added to the task",
|
||||
"ISO 8601 Due date on the project": "ISO 8601 Due date on the project",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"ASAP": "ASAP",
|
||||
"HIGH": "HIGH",
|
||||
"MEDIUM": "MEDIUM",
|
||||
"LOW": "LOW",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"Task Created": "Task Created",
|
||||
"Triggers when a new task is created.": "Triggers when a new task is created."
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import { createPiece, PieceAuth } from '@activepieces/pieces-framework';
|
||||
import { createTask } from './lib/actions/create-task';
|
||||
import { updateTask } from './lib/actions/update-task';
|
||||
import { createProject } from './lib/actions/create-project';
|
||||
import { getTask } from './lib/actions/get-task';
|
||||
import { taskCreated } from './lib/triggers/task-created';
|
||||
import { moveTask } from './lib/actions/move-task';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { findTask } from './lib/actions/find-task';
|
||||
import {
|
||||
createCustomApiCallAction,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { BASE_URL } from './lib/common/props';
|
||||
|
||||
export const motionAuth = PieceAuth.SecretText({
|
||||
displayName: 'API Key',
|
||||
description: `You can obtain API key from [API Settings](https://app.usemotion.com/web/settings/api).`,
|
||||
required: true,
|
||||
validate: async ({ auth }) => {
|
||||
try {
|
||||
await httpClient.sendRequest({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/workspaces`,
|
||||
headers: {
|
||||
'X-API-Key': auth,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
valid: true,
|
||||
};
|
||||
} catch {
|
||||
return {
|
||||
valid: false,
|
||||
error: 'Invalid API key.',
|
||||
};
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
export const motion = createPiece({
|
||||
displayName: 'Motion',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/motion.png',
|
||||
categories: [PieceCategory.PRODUCTIVITY],
|
||||
auth: motionAuth,
|
||||
authors: ['Sanket6652', 'kishanprmr'],
|
||||
actions: [
|
||||
createTask,
|
||||
updateTask,
|
||||
createProject,
|
||||
getTask,
|
||||
moveTask,
|
||||
findTask,
|
||||
createCustomApiCallAction({
|
||||
auth: motionAuth,
|
||||
baseUrl: () => BASE_URL,
|
||||
authMapping: async (auth) => {
|
||||
return {
|
||||
'X-API-Key': auth.secret_text,
|
||||
};
|
||||
},
|
||||
}),
|
||||
],
|
||||
triggers: [taskCreated],
|
||||
});
|
||||
@@ -0,0 +1,52 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { motionAuth } from '../../index';
|
||||
import { BASE_URL, priority, workspaceId } from '../common/props';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const createProject = createAction({
|
||||
auth: motionAuth,
|
||||
name: 'create-project',
|
||||
displayName: 'Create Project',
|
||||
description: 'Create a new project in Motion',
|
||||
props: {
|
||||
workspaceId: workspaceId('Workspace ID'),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Project Name',
|
||||
required: true,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
dueDate: Property.DateTime({
|
||||
displayName: 'Due Date',
|
||||
description: 'ISO 8601 Due date on the project',
|
||||
required: false,
|
||||
}),
|
||||
priority: priority,
|
||||
labels: Property.Array({
|
||||
displayName: 'Labels',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${BASE_URL}/projects`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
body: {
|
||||
name: propsValue.name,
|
||||
workspaceId: propsValue.workspaceId,
|
||||
description: propsValue.description,
|
||||
dueDate: propsValue.dueDate,
|
||||
priority: propsValue.priority,
|
||||
labels: (propsValue.labels as string[]) || [],
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,72 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { motionAuth } from '../../index';
|
||||
import {
|
||||
BASE_URL,
|
||||
priority,
|
||||
projectId,
|
||||
statusId,
|
||||
userId,
|
||||
workspaceId,
|
||||
} from '../common/props';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
|
||||
export const createTask = createAction({
|
||||
auth: motionAuth,
|
||||
name: 'create-task',
|
||||
displayName: 'Create Task',
|
||||
description: 'Creates a new task.',
|
||||
props: {
|
||||
workspaceId: workspaceId('Workspace ID'),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Task Name',
|
||||
required: true,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
dueDate: Property.DateTime({
|
||||
displayName: 'Due Date',
|
||||
required: false,
|
||||
}),
|
||||
duration: Property.Number({
|
||||
displayName: 'Duration',
|
||||
description: 'Duration in minutes.',
|
||||
required: false,
|
||||
}),
|
||||
statusId: statusId,
|
||||
priority: priority,
|
||||
projectId: projectId,
|
||||
assigneeId: userId,
|
||||
labels: Property.Array({
|
||||
displayName: 'Labels',
|
||||
description: 'The names of the labels to be added to the task.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.POST,
|
||||
url: `${BASE_URL}/tasks`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
body: {
|
||||
name: propsValue.name,
|
||||
workspaceId: propsValue.workspaceId,
|
||||
description: propsValue.description,
|
||||
dueDate: propsValue.dueDate,
|
||||
duration: propsValue.duration,
|
||||
status: propsValue.statusId,
|
||||
priority: propsValue.priority,
|
||||
projectId: propsValue.projectId,
|
||||
assigneeId: propsValue.assigneeId,
|
||||
labels: (propsValue.labels as string[]) || [],
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,86 @@
|
||||
import { motionAuth } from '../../index';
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
BASE_URL,
|
||||
projectId,
|
||||
statusId,
|
||||
userId,
|
||||
workspaceId,
|
||||
} from '../common/props';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
|
||||
export const findTask = createAction({
|
||||
auth: motionAuth,
|
||||
name: 'find-task',
|
||||
displayName: 'Find Task',
|
||||
description: 'Finds an existing task.',
|
||||
props: {
|
||||
workspaceId: workspaceId('Workspace ID'),
|
||||
includeAllStatuses: Property.Checkbox({
|
||||
displayName: 'Include All Statuses',
|
||||
required: false,
|
||||
}),
|
||||
name: Property.ShortText({
|
||||
displayName: 'Task Name',
|
||||
required: true,
|
||||
}),
|
||||
status: statusId,
|
||||
assigneeId: userId,
|
||||
projectId: projectId,
|
||||
},
|
||||
async run(context) {
|
||||
const {
|
||||
workspaceId,
|
||||
includeAllStatuses,
|
||||
name,
|
||||
status,
|
||||
assigneeId,
|
||||
projectId,
|
||||
} = context.propsValue;
|
||||
|
||||
const result = [];
|
||||
|
||||
let nextCursor: string | undefined;
|
||||
|
||||
const qs: QueryParams = {
|
||||
name,
|
||||
workspaceId,
|
||||
includeAllStatuses: includeAllStatuses ? 'true' : 'false',
|
||||
};
|
||||
if (status) qs['status'] = status;
|
||||
if (projectId) qs['projectId'] = projectId;
|
||||
if (assigneeId) qs['assigneeId'] = assigneeId;
|
||||
|
||||
do {
|
||||
if (nextCursor) {
|
||||
qs['cursor'] = nextCursor;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
tasks: { id: string; name: string }[];
|
||||
meta: { pageSize: number; nextCursor?: string };
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/tasks`,
|
||||
headers: {
|
||||
'X-API-Key': context.auth.secret_text,
|
||||
},
|
||||
queryParams: qs,
|
||||
});
|
||||
|
||||
const tasks = response.body.tasks ?? [];
|
||||
result.push(...tasks);
|
||||
|
||||
nextCursor = response.body.meta.nextCursor;
|
||||
} while (nextCursor);
|
||||
|
||||
return {
|
||||
found: result.length > 0,
|
||||
result,
|
||||
};
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,28 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { motionAuth } from '../../index';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
import { BASE_URL } from '../common/props';
|
||||
|
||||
export const getTask = createAction({
|
||||
auth: motionAuth,
|
||||
name: 'get-task',
|
||||
displayName: 'Get Task',
|
||||
description: 'Get details of a specific task by ID.',
|
||||
props: {
|
||||
taskId: Property.ShortText({
|
||||
displayName: 'Task ID',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const response = await httpClient.sendRequest( {
|
||||
method: HttpMethod.GET,
|
||||
url:`${BASE_URL}/tasks/${propsValue.taskId}`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,33 @@
|
||||
import { createAction } from '@activepieces/pieces-framework';
|
||||
import { motionAuth } from '../../index';
|
||||
import { BASE_URL, taskId, workspaceId } from '../common/props';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const moveTask = createAction({
|
||||
auth: motionAuth,
|
||||
name: 'moveTask',
|
||||
displayName: 'Move Task',
|
||||
description: 'Moves a task to a different workspace.',
|
||||
props: {
|
||||
workspaceId:workspaceId('Current Workspace'),
|
||||
taskId:taskId,
|
||||
newWorkspaceId: workspaceId('Target Workspace')
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const { taskId, newWorkspaceId } = propsValue;
|
||||
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.PATCH,
|
||||
url:`${BASE_URL}/tasks/${taskId}/move`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
body: {
|
||||
workspaceId:newWorkspaceId
|
||||
}
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,83 @@
|
||||
import { createAction, Property } from '@activepieces/pieces-framework';
|
||||
import { motionAuth } from '../../index';
|
||||
import {
|
||||
BASE_URL,
|
||||
priority,
|
||||
projectId,
|
||||
statusId,
|
||||
taskId,
|
||||
userId,
|
||||
workspaceId,
|
||||
} from '../common/props';
|
||||
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
|
||||
|
||||
export const updateTask = createAction({
|
||||
auth: motionAuth,
|
||||
name: 'update-task',
|
||||
displayName: 'Update Task',
|
||||
description: 'Update an existing task in Motion',
|
||||
props: {
|
||||
workspaceId: workspaceId('Workspace ID'),
|
||||
taskId: taskId,
|
||||
name: Property.ShortText({
|
||||
displayName: 'Task Name',
|
||||
required: false,
|
||||
}),
|
||||
description: Property.LongText({
|
||||
displayName: 'Description',
|
||||
required: false,
|
||||
}),
|
||||
dueDate: Property.DateTime({
|
||||
displayName: 'Due Date',
|
||||
required: false,
|
||||
}),
|
||||
duration: Property.Number({
|
||||
displayName: 'Duration',
|
||||
description: 'Duration in minutes.',
|
||||
required: false,
|
||||
}),
|
||||
statusId: statusId,
|
||||
priority: priority,
|
||||
projectId: projectId,
|
||||
assigneeId: userId,
|
||||
labels: Property.Array({
|
||||
displayName: 'Labels',
|
||||
description: 'The names of the labels to be added to the task',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run({ auth, propsValue }) {
|
||||
const {
|
||||
name,
|
||||
workspaceId,
|
||||
description,
|
||||
dueDate,
|
||||
duration,
|
||||
statusId,
|
||||
priority,
|
||||
assigneeId,
|
||||
} = propsValue;
|
||||
const labels = propsValue.labels ?? [];
|
||||
const response = await httpClient.sendRequest({
|
||||
method: HttpMethod.PATCH,
|
||||
url: `${BASE_URL}/tasks/${propsValue.taskId}`,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
body: {
|
||||
name,
|
||||
workspaceId,
|
||||
description,
|
||||
priority,
|
||||
dueDate,
|
||||
duration,
|
||||
staus: statusId,
|
||||
assigneeId,
|
||||
labels: labels.length > 0 ? labels : undefined,
|
||||
},
|
||||
});
|
||||
|
||||
return response.body;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,219 @@
|
||||
import { DropdownOption, Property } from '@activepieces/pieces-framework';
|
||||
import {
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { motionAuth } from '../..';
|
||||
|
||||
export const BASE_URL = 'https://api.usemotion.com/v1';
|
||||
|
||||
export const workspaceId =(displayName:string)=> Property.Dropdown({
|
||||
auth: motionAuth,
|
||||
|
||||
displayName,
|
||||
refreshers: [],
|
||||
required: true,
|
||||
options: async ({ auth }) => {
|
||||
if (!auth) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please connect your account.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
workspaces: { id: string; name: string }[];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/workspaces`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.body.workspaces.map((workspace) => ({
|
||||
label: workspace.name,
|
||||
value: workspace.id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const statusId = Property.Dropdown({
|
||||
auth: motionAuth,
|
||||
displayName: 'Status',
|
||||
refreshers: ['workspaceId'],
|
||||
required: false,
|
||||
options: async ({ auth, workspaceId }) => {
|
||||
if (!auth || !workspaceId) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please connect your account and select workspace.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{ name: string }[]>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/statuses`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
queryParams: {
|
||||
workspaceId: workspaceId as string,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.body.map((status) => ({
|
||||
label: status.name,
|
||||
value: status.name,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const projectId = Property.Dropdown({
|
||||
auth: motionAuth,
|
||||
displayName: 'Project',
|
||||
refreshers: ['workspaceId'],
|
||||
required: false,
|
||||
options: async ({ auth, workspaceId }) => {
|
||||
if (!auth || !workspaceId) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please connect your account and select workspace.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
projects: { id: string; name: string }[];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/projects`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
queryParams: {
|
||||
workspaceId: workspaceId as string,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.body.projects.map((project) => ({
|
||||
label: project.name,
|
||||
value: project.id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const userId = Property.Dropdown({
|
||||
auth: motionAuth,
|
||||
displayName: 'Assignee',
|
||||
refreshers: ['workspaceId'],
|
||||
required: false,
|
||||
options: async ({ auth, workspaceId }) => {
|
||||
if (!auth || !workspaceId) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please connect your account and select workspace.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
users: { id: string; name: string }[];
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/users`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
queryParams: {
|
||||
workspaceId: workspaceId as string,
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: response.body.users.map((user) => ({
|
||||
label: user.name,
|
||||
value: user.id,
|
||||
})),
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const taskId = Property.Dropdown({
|
||||
auth: motionAuth,
|
||||
displayName: 'Task ID',
|
||||
refreshers: ['workspaceId'],
|
||||
required: true,
|
||||
options: async ({ auth, workspaceId }) => {
|
||||
if (!auth || !workspaceId) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Please connect your account and select workspace.',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
|
||||
let nextCursor: string | undefined;
|
||||
|
||||
const options: DropdownOption<string>[] = [];
|
||||
const qs: QueryParams = { workspaceId: workspaceId as string };
|
||||
|
||||
do {
|
||||
if (nextCursor) {
|
||||
qs['cursor'] = nextCursor;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
tasks: { id: string; name: string }[];
|
||||
meta: { pageSize: number; nextCursor?: string };
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/tasks`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
queryParams: qs,
|
||||
});
|
||||
|
||||
const tasks = response.body.tasks ?? [];
|
||||
for (const { id, name } of tasks) {
|
||||
options.push({ label: name, value: id });
|
||||
}
|
||||
|
||||
nextCursor = response.body.meta.nextCursor;
|
||||
} while (nextCursor);
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export const priority = Property.StaticDropdown({
|
||||
displayName: 'Priority',
|
||||
required: false,
|
||||
options: {
|
||||
disabled: false,
|
||||
options: [
|
||||
{ label: 'ASAP', value: 'ASAP' },
|
||||
{ label: 'HIGH', value: 'HIGH' },
|
||||
{ label: 'MEDIUM', value: 'MEDIUM' },
|
||||
{ label: 'LOW', value: 'LOW' },
|
||||
],
|
||||
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,129 @@
|
||||
import {
|
||||
AppConnectionValueForAuthProperty,
|
||||
createTrigger,
|
||||
PiecePropValueSchema,
|
||||
TriggerStrategy,
|
||||
} from '@activepieces/pieces-framework';
|
||||
import { motionAuth } from '../../index';
|
||||
import {
|
||||
DedupeStrategy,
|
||||
httpClient,
|
||||
HttpMethod,
|
||||
Polling,
|
||||
pollingHelper,
|
||||
QueryParams,
|
||||
} from '@activepieces/pieces-common';
|
||||
import { BASE_URL, workspaceId } from '../common/props';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
const polling: Polling<
|
||||
AppConnectionValueForAuthProperty<typeof motionAuth>,
|
||||
{ workspaceId: string }
|
||||
> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, propsValue }) {
|
||||
const result = [];
|
||||
|
||||
let nextCursor: string | undefined;
|
||||
|
||||
const qs: QueryParams = {
|
||||
workspaceId: propsValue.workspaceId,
|
||||
};
|
||||
|
||||
do {
|
||||
if (nextCursor) {
|
||||
qs['cursor'] = nextCursor;
|
||||
}
|
||||
|
||||
const response = await httpClient.sendRequest<{
|
||||
tasks: { id: string; name: string; createdTime: string }[];
|
||||
meta: { pageSize: number; nextCursor?: string };
|
||||
}>({
|
||||
method: HttpMethod.GET,
|
||||
url: `${BASE_URL}/tasks`,
|
||||
headers: {
|
||||
'X-API-Key': auth.secret_text,
|
||||
},
|
||||
queryParams: qs,
|
||||
});
|
||||
|
||||
const tasks = response.body.tasks ?? [];
|
||||
result.push(...tasks);
|
||||
|
||||
nextCursor = response.body.meta.nextCursor;
|
||||
} while (nextCursor);
|
||||
|
||||
return result.map((task) => {
|
||||
return {
|
||||
epochMilliSeconds: dayjs(task.createdTime).valueOf(),
|
||||
data: task,
|
||||
};
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
export const taskCreated = createTrigger({
|
||||
auth: motionAuth,
|
||||
name: 'task-created',
|
||||
displayName: 'Task Created',
|
||||
description: 'Triggers when a new task is created.',
|
||||
type: TriggerStrategy.POLLING,
|
||||
props: {
|
||||
workspaceId: workspaceId('Workspace ID'),
|
||||
},
|
||||
|
||||
async onEnable(context) {
|
||||
await pollingHelper.onEnable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, {
|
||||
auth: context.auth,
|
||||
store: context.store,
|
||||
propsValue: context.propsValue,
|
||||
});
|
||||
},
|
||||
async test(context) {
|
||||
return await pollingHelper.test(polling, context);
|
||||
},
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context);
|
||||
},
|
||||
sampleData: {
|
||||
id: 'task_123',
|
||||
name: 'Sample Task',
|
||||
description: 'This is a sample task',
|
||||
duration: 60,
|
||||
dueDate: '2024-03-20T15:00:00Z',
|
||||
deadlineType: 'HARD',
|
||||
completed: false,
|
||||
creator: {
|
||||
id: 'user_123',
|
||||
name: 'John Doe',
|
||||
email: 'john@example.com',
|
||||
},
|
||||
workspace: {
|
||||
id: 'workspace_123',
|
||||
name: 'My Workspace',
|
||||
},
|
||||
status: {
|
||||
name: 'In Progress',
|
||||
isDefaultStatus: false,
|
||||
isResolvedStatus: false,
|
||||
},
|
||||
priority: 'HIGH',
|
||||
labels: [{ name: 'Important' }, { name: 'Urgent' }],
|
||||
assignees: [
|
||||
{
|
||||
id: 'user_456',
|
||||
name: 'Jane Smith',
|
||||
email: 'jane@example.com',
|
||||
},
|
||||
],
|
||||
createdTime: '2024-03-19T10:00:00Z',
|
||||
updatedTime: '2024-03-19T10:00:00Z',
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user