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,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Cloud-basierte Task-Management-Anwendung.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Melden Sie sich bei [Microsoft Azure Portal](https://portal.azure.com/).\n. Von der linken Seitenleiste gehen Sie zur **Microsoft Enfra ID**.\n3. Unter **Verwalten** klicken Sie auf **App-Registrierungen**.\n4. Klicken Sie auf die **Neue Registrierung** Schaltfläche.\n5. Geben Sie einen **Name** für Ihre App ein.\n6. Für **unterstützte Kontotypen**, auswählen:\n - **Konten in jedem Organisationsverzeichnis (jeder Microsoft-Entra-ID-Mieter - Multitenant) und persönlichen Microsoft-Konten**\n - Oder wählen Sie nach Ihren Anforderungen aus.\n7. In **Umleitungs-URI** wählen Sie **Web** und fügen Sie die angegebene URL hinzu.\n8. Klicken Sie auf **Registrieren**.\n9. Nach der Registrierung werden Sie zur Übersichtsseite der App weitergeleitet. Kopieren Sie die **Anwendungs-(Client)-ID**.\n10. Gehen Sie aus dem linken Menü zu **Zertifikate & Geheimnis**.\n - Unter **Kundengeheimnis**, klicken Sie **Kundengeheimnis**.\n - Geben Sie eine Beschreibung an, setzen Sie ein Ablaufdatum und klicken Sie auf **Hinzufügen**.\n - Kopieren Sie den **Wert** des Client-Geheimnisses (dies wird nicht wieder angezeigt).\n11. Gehe zu **API-Berechtigungen** vom linken Menü.\n - Klicke auf **Berechtigung hinzufügen**.\n - Wähle **Microsoft Graph** → **Delegierte Berechtigungen**.\n - Fügen Sie folgende Bereiche hinzu:\n - Benutzer. ead\n - Aufgaben. eadWrite \n - offline_access\n - Klicken Sie auf **Berechtigungen hinzufügen**.\n12. Kopieren Sie Ihre **Client-ID** und **Client-Geheimnis**.\n",
|
||||
"Create Task": "Aufgabe erstellen",
|
||||
"Create Task List": "Aufgabenliste erstellen",
|
||||
"Update Task": "Aufgabe aktualisieren",
|
||||
"Update Task List": "Aufgabenliste aktualisieren",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Aufgabe löschen",
|
||||
"Add an Attachment": "Anhang hinzufügen",
|
||||
"Get Task": "Aufgabe abrufen",
|
||||
"Find Task List": "Aufgabenliste finden",
|
||||
"Find Task": "Aufgabe finden",
|
||||
"Custom API Call": "Eigener API-Aufruf",
|
||||
"Creates a new task.": "Erstellt eine neue Aufgabe.",
|
||||
"Create a new task list.": "Neue Aufgabenliste anlegen.",
|
||||
"Update an existing task.": "Bestehende Aufgabe aktualisieren.",
|
||||
"Updates an existing task list.": "Aktualisiert eine vorhandene Aufgabenliste.",
|
||||
"Marks a task as completed.": "Markiert eine Aufgabe als abgeschlossen.",
|
||||
"Deletes an existing task.": "Löscht eine existierende Aufgabe.",
|
||||
"Adds an attachment to a task.": "Fügt einer Aufgabe einen Anhang hinzu.",
|
||||
"Gets the details of a specific task.": "Ruft die Details einer bestimmten Aufgabe ab.",
|
||||
"Finds a task list by its name.": "Findet eine Aufgabenliste mit ihrem Namen.",
|
||||
"Finds tasks by title.": "Findet Aufgaben nach Titel.",
|
||||
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
|
||||
"Task List": "Aufgabenliste",
|
||||
"Title": "Titel",
|
||||
"Body Content": "Inhalt des Körpers",
|
||||
"Importance": "Bedeutung",
|
||||
"Status": "Status",
|
||||
"Due Date": "Fälligkeitsdatum",
|
||||
"Reminder Date": "Erinnerungsdatum",
|
||||
"Start Date": "Startdatum",
|
||||
"Categories": "Kategorien",
|
||||
"Task": "Aufgabe",
|
||||
"New Name": "Neuer Name",
|
||||
"File": "Datei",
|
||||
"Attachment Name (Optional)": "Name des Anhangs (optional)",
|
||||
"Match Type": "Match-Typ",
|
||||
"Task Title": "Aufgabentitel",
|
||||
"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)",
|
||||
"The task list to create the task in.": "Die Aufgabenliste, in der die Aufgabe erstellt werden soll.",
|
||||
"The title of the task.": "Der Titel der Aufgabe.",
|
||||
"The body or notes for the task.": "Der Körper oder Notizen für die Aufgabe.",
|
||||
"The importance of the task.": "Die Bedeutung der Aufgabe.",
|
||||
"The status of the task.": "Der Status der Aufgabe.",
|
||||
"The date and time the task is scheduled to start.": "Das Datum und die Uhrzeit, in der die Aufgabe beginnen soll.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Durch Kommas getrennte Kategorien für die Aufgabe (z. B. Arbeit, Personal).",
|
||||
"The name for the new task list.": "Der Name für die neue Aufgabenliste.",
|
||||
"The task list containing the task to update.": "Die Aufgabenliste, die die zu aktualisierende Aufgabe enthält.",
|
||||
"The task to update.": "Die zu aktualisierende Aufgabe.",
|
||||
"The task list to update.": "Die zu aktualisierende Aufgabenliste.",
|
||||
"The new name for the task list.": "Der neue Name für die Aufgabenliste.",
|
||||
"The task list containing the task you want to complete.": "Die Aufgabenliste, die die Aufgabe enthält, die Sie ausführen möchten.",
|
||||
"The specific task to mark as complete.": "Die spezifische Aufgabe, die als erledigt markiert werden soll.",
|
||||
"The list containing the task you want to delete.": "Die Liste mit der Aufgabe, die Sie löschen möchten.",
|
||||
"The specific task to delete.": "Die spezifische Aufgabe, die gelöscht werden soll.",
|
||||
"The task list that contains the task.": "Die Aufgabenliste, die die Aufgabe enthält.",
|
||||
"The task to which you are adding the attachment.": "Die Aufgabe, zu der Sie den Anhang hinzufügen.",
|
||||
"The file to attach (up to 25 MB supported).": "Die anzuhängende Datei (bis zu 25 MB unterstützt).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "Der anzuzeigende Dateiname. Wenn leer gelassen, wird der ursprüngliche Dateiname verwendet.",
|
||||
"The list containing the task you want to retrieve.": "Die Liste mit der Aufgabe, die Sie abrufen möchten.",
|
||||
"The specific task to retrieve.": "Die spezifische Aufgabe, die wir abrufen müssen.",
|
||||
"The name (or partial name) of the task list to find.": "Der Name (oder Teilname) der zu findenden Aufgabenliste.",
|
||||
"How to match the list name.": "Wie man mit dem Listennamen übereinstimmt.",
|
||||
"Select a specific task list to search within.": "Wählen Sie eine bestimmte Aufgabenliste für die Suche aus.",
|
||||
"The title (or partial title) of the task to find.": "Der Titel (oder Teiltitel) der zu findenden Aufgabe.",
|
||||
"How to match the task title.": "Wie man mit dem Titel der Aufgabe übereinstimmt.",
|
||||
"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..",
|
||||
"Low": "Niedrig",
|
||||
"Normal": "Normal",
|
||||
"High": "Hoch",
|
||||
"Not Started": "Nicht gestartet",
|
||||
"In Progress": "In Bearbeitung",
|
||||
"Completed": "Abgeschlossen",
|
||||
"Waiting On Others": "Warten auf anderen",
|
||||
"Deferred": "Aufgeschoben",
|
||||
"Contains": "Enthält",
|
||||
"Starts With": "Beginnt mit",
|
||||
"Exact Match": "Genaues Match",
|
||||
"GET": "ERHALTEN",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "LÖSCHEN",
|
||||
"HEAD": "HEAD",
|
||||
"New Task": "Neue Aufgabe",
|
||||
"New or Updated Task": "Neue oder aktualisierte Aufgabe",
|
||||
"New List": "Neue Liste",
|
||||
"Task Completed": "Aufgabe erledigt",
|
||||
"Triggers when a new task is created.": "Wird ausgelöst, wenn eine neue Aufgabe erstellt wird.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Wird ausgelöst, wenn eine neue Aufgabe erstellt oder eine bestehende Aufgabe aktualisiert wird.",
|
||||
"Triggers when a new task list is created.": "Wird ausgelöst, wenn eine neue Aufgabenliste erstellt wird.",
|
||||
"Triggers when a task is completed in a specific list.": "Wird ausgelöst, wenn eine Aufgabe in einer bestimmten Liste abgeschlossen ist.",
|
||||
"The list to watch for completed tasks.": "Die Liste für abgeschlossene Aufgaben."
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Aplicación de administración de tareas basada en la nube.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - User.Read\n - Tasks.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Create Task": "Crear tarea",
|
||||
"Create Task List": "Crear lista de tareas",
|
||||
"Update Task": "Actualizar tarea",
|
||||
"Update Task List": "Actualizar lista de tareas",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Eliminar tarea",
|
||||
"Add an Attachment": "Añadir un archivo adjunto",
|
||||
"Get Task": "Obtener tarea",
|
||||
"Find Task List": "Buscar lista de tareas",
|
||||
"Find Task": "Buscar tarea",
|
||||
"Custom API Call": "Llamada API personalizada",
|
||||
"Creates a new task.": "Crea una nueva tarea.",
|
||||
"Create a new task list.": "Crear una nueva lista de tareas.",
|
||||
"Update an existing task.": "Actualizar una tarea existente.",
|
||||
"Updates an existing task list.": "Actualiza una lista de tareas existente.",
|
||||
"Marks a task as completed.": "Marca una tarea como completada.",
|
||||
"Deletes an existing task.": "Elimina una tarea existente.",
|
||||
"Adds an attachment to a task.": "Añade un archivo adjunto a una tarea.",
|
||||
"Gets the details of a specific task.": "Obtiene los detalles de una tarea específica.",
|
||||
"Finds a task list by its name.": "Encuentra una lista de tareas por su nombre.",
|
||||
"Finds tasks by title.": "Encuentra tareas por título.",
|
||||
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
|
||||
"Task List": "Lista de tareas",
|
||||
"Title": "Título",
|
||||
"Body Content": "Contenido del cuerpo",
|
||||
"Importance": "Importancia",
|
||||
"Status": "Estado",
|
||||
"Due Date": "Fecha de fin",
|
||||
"Reminder Date": "Fecha de recordatorio",
|
||||
"Start Date": "Fecha de inicio",
|
||||
"Categories": "Categorías",
|
||||
"Task": "Tarea",
|
||||
"New Name": "Nuevo nombre",
|
||||
"File": "Archivo",
|
||||
"Attachment Name (Optional)": "Nombre adjunto (opcional)",
|
||||
"Match Type": "Tipo de partida",
|
||||
"Task Title": "Título de la tarea",
|
||||
"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)",
|
||||
"The task list to create the task in.": "La lista de tareas en la que crear la tarea.",
|
||||
"The title of the task.": "El título de la tarea.",
|
||||
"The body or notes for the task.": "El cuerpo o las notas para la tarea.",
|
||||
"The importance of the task.": "La importancia de la tarea.",
|
||||
"The status of the task.": "El estado de la tarea.",
|
||||
"The date and time the task is scheduled to start.": "La fecha y hora que la tarea está programada para comenzar.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Categorías separadas por comas para la tarea (por ejemplo, Trabajo, Personal).",
|
||||
"The name for the new task list.": "El nombre para la nueva lista de tareas.",
|
||||
"The task list containing the task to update.": "La lista de tareas que contiene la tarea a actualizar.",
|
||||
"The task to update.": "La tarea a actualizar.",
|
||||
"The task list to update.": "La lista de tareas a actualizar.",
|
||||
"The new name for the task list.": "El nuevo nombre para la lista de tareas.",
|
||||
"The task list containing the task you want to complete.": "La lista de tareas que contiene la tarea que desea completar.",
|
||||
"The specific task to mark as complete.": "La tarea específica a marcar como completa.",
|
||||
"The list containing the task you want to delete.": "La lista que contiene la tarea que desea eliminar.",
|
||||
"The specific task to delete.": "La tarea específica a eliminar.",
|
||||
"The task list that contains the task.": "La lista de tareas que contiene la tarea.",
|
||||
"The task to which you are adding the attachment.": "La tarea a la que está añadiendo el archivo adjunto.",
|
||||
"The file to attach (up to 25 MB supported).": "El archivo a adjuntar (hasta 25 MB soportados).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "El nombre a mostrar para el adjunto. Si se deja en blanco, se utilizará el nombre del archivo original.",
|
||||
"The list containing the task you want to retrieve.": "La lista que contiene la tarea que desea recuperar.",
|
||||
"The specific task to retrieve.": "La tarea específica a recuperar.",
|
||||
"The name (or partial name) of the task list to find.": "El nombre (o nombre parcial) de la lista de tareas a encontrar.",
|
||||
"How to match the list name.": "Cómo coincidir con el nombre de la lista.",
|
||||
"Select a specific task list to search within.": "Seleccione una lista de tareas específica para buscar en el interior.",
|
||||
"The title (or partial title) of the task to find.": "El título (o título parcial) de la tarea a encontrar.",
|
||||
"How to match the task title.": "Cómo coincidir con el título de la tarea.",
|
||||
"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.",
|
||||
"Low": "Baja",
|
||||
"Normal": "Normal",
|
||||
"High": "Alta",
|
||||
"Not Started": "No iniciado",
|
||||
"In Progress": "En curso",
|
||||
"Completed": "Completado",
|
||||
"Waiting On Others": "Esperando a otros",
|
||||
"Deferred": "Aplazado",
|
||||
"Contains": "Contiene",
|
||||
"Starts With": "Comienza por",
|
||||
"Exact Match": "Partida exacta",
|
||||
"GET": "RECOGER",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "BORRAR",
|
||||
"HEAD": "LIMPIO",
|
||||
"New Task": "Nueva tarea",
|
||||
"New or Updated Task": "Tarea Nueva o Actualizada",
|
||||
"New List": "Nueva lista",
|
||||
"Task Completed": "Tarea completada",
|
||||
"Triggers when a new task is created.": "Se activa cuando se crea una nueva tarea.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Se activa cuando se crea una nueva tarea o se actualiza una tarea existente.",
|
||||
"Triggers when a new task list is created.": "Dispara cuando se crea una nueva lista de tareas.",
|
||||
"Triggers when a task is completed in a specific list.": "Se activa cuando una tarea se completa en una lista específica.",
|
||||
"The list to watch for completed tasks.": "La lista a ver para las tareas completadas."
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Application de gestion des tâches basée sur le Cloud.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - User.Read\n - Tasks.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Create Task": "Créer une tâche",
|
||||
"Create Task List": "Créer une liste de tâches",
|
||||
"Update Task": "Tâche de mise à jour",
|
||||
"Update Task List": "Mettre à jour la liste des tâches",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Supprimer la tâche",
|
||||
"Add an Attachment": "Ajouter une pièce jointe",
|
||||
"Get Task": "Obtenir une tâche",
|
||||
"Find Task List": "Trouver la liste des tâches",
|
||||
"Find Task": "Trouver une tâche",
|
||||
"Custom API Call": "Appel API personnalisé",
|
||||
"Creates a new task.": "Crée une nouvelle tâche.",
|
||||
"Create a new task list.": "Créer une nouvelle liste de tâches.",
|
||||
"Update an existing task.": "Mettre à jour une tâche existante.",
|
||||
"Updates an existing task list.": "Met à jour une liste de tâches existante.",
|
||||
"Marks a task as completed.": "Marque une tâche comme terminée.",
|
||||
"Deletes an existing task.": "Supprime une tâche existante.",
|
||||
"Adds an attachment to a task.": "Ajoute une pièce jointe à une tâche.",
|
||||
"Gets the details of a specific task.": "Renvoie les détails d'une tâche spécifique.",
|
||||
"Finds a task list by its name.": "Trouve une liste de tâches par son nom.",
|
||||
"Finds tasks by title.": "Trouve des tâches par titre.",
|
||||
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
|
||||
"Task List": "Liste des Tâches",
|
||||
"Title": "Titre de la page",
|
||||
"Body Content": "Contenu du corps",
|
||||
"Importance": "Importance",
|
||||
"Status": "Statut",
|
||||
"Due Date": "Date de fin",
|
||||
"Reminder Date": "Date de rappel",
|
||||
"Start Date": "Date de début",
|
||||
"Categories": "Catégories",
|
||||
"Task": "Tâche",
|
||||
"New Name": "Nouveau nom",
|
||||
"File": "Ficher",
|
||||
"Attachment Name (Optional)": "Nom de la pièce jointe (facultatif)",
|
||||
"Match Type": "Type de correspondance",
|
||||
"Task Title": "Titre de la tâche",
|
||||
"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)",
|
||||
"The task list to create the task in.": "La liste de tâches dans laquelle créer la tâche.",
|
||||
"The title of the task.": "Le titre de la tâche.",
|
||||
"The body or notes for the task.": "Le corps ou les notes pour la tâche.",
|
||||
"The importance of the task.": "L'importance de la tâche.",
|
||||
"The status of the task.": "Le statut de la tâche.",
|
||||
"The date and time the task is scheduled to start.": "La date et l'heure de démarrage de la tâche.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Catégories séparées par des virgules pour la tâche (ex: travail, personnel).",
|
||||
"The name for the new task list.": "Le nom de la nouvelle liste de tâches.",
|
||||
"The task list containing the task to update.": "La liste des tâches contenant la tâche à mettre à jour.",
|
||||
"The task to update.": "La tâche à mettre à jour.",
|
||||
"The task list to update.": "La liste des tâches à mettre à jour.",
|
||||
"The new name for the task list.": "Le nouveau nom de la liste des tâches.",
|
||||
"The task list containing the task you want to complete.": "La liste des tâches contenant la tâche que vous voulez accomplir.",
|
||||
"The specific task to mark as complete.": "La tâche spécifique à marquer comme terminée.",
|
||||
"The list containing the task you want to delete.": "La liste contenant la tâche que vous voulez supprimer.",
|
||||
"The specific task to delete.": "La tâche spécifique à supprimer.",
|
||||
"The task list that contains the task.": "La liste des tâches qui contient la tâche.",
|
||||
"The task to which you are adding the attachment.": "La tâche à laquelle vous ajoutez la pièce jointe.",
|
||||
"The file to attach (up to 25 MB supported).": "Le fichier à joindre (jusqu'à 25 Mo pris en charge).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "Le nom à afficher pour la pièce jointe. Si laissé vide, le nom du fichier original sera utilisé.",
|
||||
"The list containing the task you want to retrieve.": "La liste contenant la tâche que vous voulez récupérer.",
|
||||
"The specific task to retrieve.": "La tâche spécifique à récupérer.",
|
||||
"The name (or partial name) of the task list to find.": "Le nom (ou nom partiel) de la liste de tâches à trouver.",
|
||||
"How to match the list name.": "Comment faire correspondre le nom de la liste.",
|
||||
"Select a specific task list to search within.": "Sélectionnez une liste de tâches spécifique à rechercher.",
|
||||
"The title (or partial title) of the task to find.": "Le titre (ou titre partiel) de la tâche à trouver.",
|
||||
"How to match the task title.": "Comment faire correspondre le titre de la tâche.",
|
||||
"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.",
|
||||
"Low": "Bas",
|
||||
"Normal": "Normale",
|
||||
"High": "Élevé",
|
||||
"Not Started": "Non démarré",
|
||||
"In Progress": "En cours",
|
||||
"Completed": "Terminé",
|
||||
"Waiting On Others": "En attente d'autres",
|
||||
"Deferred": "Retardé",
|
||||
"Contains": "Contient",
|
||||
"Starts With": "Commence avec",
|
||||
"Exact Match": "Correspondance exacte",
|
||||
"GET": "OBTENIR",
|
||||
"POST": "POSTER",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "EFFACER",
|
||||
"DELETE": "SUPPRIMER",
|
||||
"HEAD": "TÊTE",
|
||||
"New Task": "Nouvelle tâche",
|
||||
"New or Updated Task": "Nouvelle tâche ou mise à jour",
|
||||
"New List": "Nouvelle liste",
|
||||
"Task Completed": "Tâche terminée",
|
||||
"Triggers when a new task is created.": "Déclenche quand une nouvelle tâche est créée.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Déclenche lorsqu'une nouvelle tâche est créée ou qu'une tâche existante est mise à jour.",
|
||||
"Triggers when a new task list is created.": "Déclenche quand une nouvelle liste de tâches est créée.",
|
||||
"Triggers when a task is completed in a specific list.": "Déclenche lorsqu'une tâche est terminée dans une liste spécifique.",
|
||||
"The list to watch for completed tasks.": "La liste à surveiller pour les tâches terminées."
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "クラウドベースのタスク管理アプリケーション。",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - User.Read\n - Tasks.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Create Task": "タスクを作成",
|
||||
"Create Task List": "タスクリストを作成",
|
||||
"Update Task": "タスクの更新",
|
||||
"Update Task List": "タスクリストの更新",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "タスクの削除",
|
||||
"Add an Attachment": "添付ファイルを追加",
|
||||
"Get Task": "タスクを取得",
|
||||
"Find Task List": "タスクリストを検索",
|
||||
"Find Task": "タスクを検索",
|
||||
"Custom API Call": "カスタムAPI通話",
|
||||
"Creates a new task.": "新しいタスクを作成します。",
|
||||
"Create a new task list.": "新しいタスクリストを作成します。",
|
||||
"Update an existing task.": "既存のタスクを更新する。",
|
||||
"Updates an existing task list.": "既存のタスクリストを更新する。",
|
||||
"Marks a task as completed.": "タスクを完了としてマークします。",
|
||||
"Deletes an existing task.": "既存のタスクを削除します。",
|
||||
"Adds an attachment to a task.": "タスクに添付ファイルを追加します。",
|
||||
"Gets the details of a specific task.": "特定のタスクの詳細を取得します。",
|
||||
"Finds a task list by its name.": "タスクリストをその名前で検索します。",
|
||||
"Finds tasks by title.": "タスクをタイトルで検索します。",
|
||||
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
|
||||
"Task List": "タスクリスト",
|
||||
"Title": "タイトル",
|
||||
"Body Content": "本文コンテンツ",
|
||||
"Importance": "重要度",
|
||||
"Status": "ステータス",
|
||||
"Due Date": "締切日",
|
||||
"Reminder Date": "リマインダー日付",
|
||||
"Start Date": "開始日",
|
||||
"Categories": "カテゴリ",
|
||||
"Task": "タスク",
|
||||
"New Name": "新しい名前",
|
||||
"File": "ファイル",
|
||||
"Attachment Name (Optional)": "添付ファイル名(オプション)",
|
||||
"Match Type": "一致するタイプ",
|
||||
"Task Title": "タスクタイトル",
|
||||
"Method": "方法",
|
||||
"Headers": "ヘッダー",
|
||||
"Query Parameters": "クエリパラメータ",
|
||||
"Body": "本文",
|
||||
"Response is Binary ?": "応答はバイナリですか?",
|
||||
"No Error on Failure": "失敗時にエラーはありません",
|
||||
"Timeout (in seconds)": "タイムアウト(秒)",
|
||||
"The task list to create the task in.": "タスクを作成するタスクリスト。",
|
||||
"The title of the task.": "タスクのタイトル",
|
||||
"The body or notes for the task.": "タスクの本文またはメモ。",
|
||||
"The importance of the task.": "タスクの重要性。",
|
||||
"The status of the task.": "タスクの状態",
|
||||
"The date and time the task is scheduled to start.": "タスクの開始日時。",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "タスクのカンマ区切りのカテゴリ (作業、個人用など)",
|
||||
"The name for the new task list.": "新しいタスクリストの名前",
|
||||
"The task list containing the task to update.": "更新するタスクを含むタスクリスト。",
|
||||
"The task to update.": "更新するタスク",
|
||||
"The task list to update.": "更新するタスクリスト。",
|
||||
"The new name for the task list.": "タスクリストの新しい名前",
|
||||
"The task list containing the task you want to complete.": "完了したいタスクを含むタスクリスト。",
|
||||
"The specific task to mark as complete.": "完了としてマークする特定のタスク。",
|
||||
"The list containing the task you want to delete.": "削除したいタスクを含むリストです。",
|
||||
"The specific task to delete.": "削除する特定のタスク。",
|
||||
"The task list that contains the task.": "タスクを含むタスクリスト。",
|
||||
"The task to which you are adding the attachment.": "添付ファイルを追加するタスク",
|
||||
"The file to attach (up to 25 MB supported).": "添付するファイル(最大25 MB)。",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "添付ファイルに表示する名前。空白の場合は元のファイル名が使用されます。",
|
||||
"The list containing the task you want to retrieve.": "取得したいタスクを含むリスト。",
|
||||
"The specific task to retrieve.": "取得する特定のタスク。",
|
||||
"The name (or partial name) of the task list to find.": "検索するタスクリストの名前 (または部分的な名前)。",
|
||||
"How to match the list name.": "リスト名を一致させる方法。",
|
||||
"Select a specific task list to search within.": "検索する特定のタスクリストを選択します。",
|
||||
"The title (or partial title) of the task to find.": "検索するタスクのタイトル (または部分的なタイトル) 。",
|
||||
"How to match the task title.": "タスクのタイトルを一致させる方法。",
|
||||
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
|
||||
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
|
||||
"Low": "低い",
|
||||
"Normal": "標準",
|
||||
"High": "高い",
|
||||
"Not Started": "未開始",
|
||||
"In Progress": "進行中",
|
||||
"Completed": "完了",
|
||||
"Waiting On Others": "他のユーザーを待っています",
|
||||
"Deferred": "遅延しました",
|
||||
"Contains": "以下を含む",
|
||||
"Starts With": "で始まる",
|
||||
"Exact Match": "完全一致",
|
||||
"GET": "取得",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "削除",
|
||||
"HEAD": "頭",
|
||||
"New Task": "新しいタスク",
|
||||
"New or Updated Task": "新規または更新されたタスク",
|
||||
"New List": "新規リスト",
|
||||
"Task Completed": "タスクが完了しました",
|
||||
"Triggers when a new task is created.": "新しいタスクが作成されたときにトリガーされます。",
|
||||
"Triggers when a new task is created or an existing task is updated.": "新規タスクが作成された場合、または既存のタスクが更新されたときにトリガーされます。",
|
||||
"Triggers when a new task list is created.": "新しいタスクリストが作成されたときにトリガーします。",
|
||||
"Triggers when a task is completed in a specific list.": "タスクが特定のリストで完了したときにトリガーします。",
|
||||
"The list to watch for completed tasks.": "完了したタスクを監視するリスト。"
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Cloud gebaseerde taak beheer toepassing.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Log in bij [Microsoft Azure Portal](https://portal.azure.com/).\n. Ga naar **Microsoft Enfra ID**.\n3. Onder **Beheren**, klik op **App registraties**.\n4. Klik op de **Nieuwe registratie** knop.\n5. Voer een **Naam** in voor uw app.\n6. Voor **Ondersteunde accounttypen**, kies keuze:\n - **Accounts in elke map van de organisatie (Any Microsoft Entra ID-tenant - Multitenant) en persoonlijke Microsoft accounts**\n - Of selecteer gebaseerd op uw vereiste.\n7. In **Redirect URI**, selecteer **Web** en voeg de opgegeven URL toe.\n8. Klik **Register**.\n9. Na registratie wordt u doorverwezen naar de overzichtspagina. Kopieer de **Applicatie (client) ID**.\n10. Vanuit het linkermenu ga naar **Certificaten & geheimen**.\n - Onder **Client secrets**, klik op **Nieuwe client geheim**.\n - Geef een beschrijving, verloop, en klik **Toevoegen**.\n - Kopieer de **waarde** van de client secret (dit zal niet meer worden weergegeven).\n11. Ga naar **API permissies** in het linkermenu.\n - Klik **Een machtiging toevoegen**.\n - Selecteer **Microsoft Graph** → **Toegewezen machtigingen**.\n - Voeg de volgende toepassingsgebieden toe:\n - gebruiker. ead\n - Taken. eadWrite \n - offline_access\n - Klik **Permissies toevoegen**.\n12. Kopieer de **Client ID** en **Client Secret**.\n",
|
||||
"Create Task": "Taak maken",
|
||||
"Create Task List": "Takenlijst maken",
|
||||
"Update Task": "Taak bijwerken",
|
||||
"Update Task List": "Takenlijst bijwerken",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Taak verwijderen",
|
||||
"Add an Attachment": "Een bijlage toevoegen",
|
||||
"Get Task": "Ophalen taak",
|
||||
"Find Task List": "Takenlijst zoeken",
|
||||
"Find Task": "Zoek Taak",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new task.": "Maakt een nieuwe taak aan.",
|
||||
"Create a new task list.": "Maak een nieuwe takenlijst aan.",
|
||||
"Update an existing task.": "Een bestaande taak bijwerken.",
|
||||
"Updates an existing task list.": "Werkt een bestaande takenlijst bij.",
|
||||
"Marks a task as completed.": "Markeert een taak als voltooid.",
|
||||
"Deletes an existing task.": "Verwijdert een bestaande taak.",
|
||||
"Adds an attachment to a task.": "Voegt een bijlage toe aan een taak.",
|
||||
"Gets the details of a specific task.": "Geeft de details van een specifieke taak.",
|
||||
"Finds a task list by its name.": "Vindt een takenlijst volgens de naam.",
|
||||
"Finds tasks by title.": "Vindt taken op titel.",
|
||||
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
|
||||
"Task List": "Taak lijst",
|
||||
"Title": "Aanspreektitel",
|
||||
"Body Content": "Inhoud artikeltekst",
|
||||
"Importance": "Belangrijkheid",
|
||||
"Status": "status",
|
||||
"Due Date": "Inleverdatum",
|
||||
"Reminder Date": "Datum van herinnering",
|
||||
"Start Date": "Start datum",
|
||||
"Categories": "Categoriechar@@0n",
|
||||
"Task": "Opdracht",
|
||||
"New Name": "Nieuwe naam",
|
||||
"File": "Bestand",
|
||||
"Attachment Name (Optional)": "Bijlage naam (optioneel)",
|
||||
"Match Type": "Wedstrijd Type",
|
||||
"Task Title": "Taak titel",
|
||||
"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)",
|
||||
"The task list to create the task in.": "De takenlijst waarin de taak moet worden aangemaakt.",
|
||||
"The title of the task.": "De titel van de taak.",
|
||||
"The body or notes for the task.": "Het lichaam of notities van de taak.",
|
||||
"The importance of the task.": "Het belang van deze taak.",
|
||||
"The status of the task.": "De status van de taak.",
|
||||
"The date and time the task is scheduled to start.": "De datum en tijd waarop de taak gepland is om te starten.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Kommagescheiden categorieën voor de taak (bijv. Werk, Persoonlijk).",
|
||||
"The name for the new task list.": "De naam van de nieuwe takenlijst.",
|
||||
"The task list containing the task to update.": "De takenlijst met de bij te werken taak",
|
||||
"The task to update.": "De taak om bij te werken.",
|
||||
"The task list to update.": "De te updaten takenlijst",
|
||||
"The new name for the task list.": "De nieuwe naam van de takenlijst.",
|
||||
"The task list containing the task you want to complete.": "De takenlijst met de taak die u wilt voltooien.",
|
||||
"The specific task to mark as complete.": "De specifieke taak om te markeren als voltooid.",
|
||||
"The list containing the task you want to delete.": "De lijst met de taak die u wilt verwijderen.",
|
||||
"The specific task to delete.": "De specifieke taak om te verwijderen.",
|
||||
"The task list that contains the task.": "De takenlijst die de taak bevat.",
|
||||
"The task to which you are adding the attachment.": "De taak waaraan je de bijlage toevoegt.",
|
||||
"The file to attach (up to 25 MB supported).": "Het toe te voegen bestand (tot 25 MB ondersteund).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "De weer te geven naam voor de bijlage. Indien leeg wordt de oorspronkelijke bestandsnaam gebruikt.",
|
||||
"The list containing the task you want to retrieve.": "De lijst met de taak die u wilt ophalen.",
|
||||
"The specific task to retrieve.": "De specifieke taak om op te halen.",
|
||||
"The name (or partial name) of the task list to find.": "De naam (of gedeeltelijke naam) van de takenlijst om te vinden.",
|
||||
"How to match the list name.": "Hoe de naam van de lijst te overeenkomen.",
|
||||
"Select a specific task list to search within.": "Selecteer een specifieke takenlijst om in te zoeken.",
|
||||
"The title (or partial title) of the task to find.": "De titel (of gedeeltelijke titel) van de taak om te vinden.",
|
||||
"How to match the task title.": "Hoe de titel van de taak te vergelijken.",
|
||||
"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..",
|
||||
"Low": "laag",
|
||||
"Normal": "normaal",
|
||||
"High": "hoog",
|
||||
"Not Started": "Niet begonnen",
|
||||
"In Progress": "In uitvoering",
|
||||
"Completed": "Voltooid",
|
||||
"Waiting On Others": "Wachten op anderen",
|
||||
"Deferred": "Uitgesteld",
|
||||
"Contains": "Bevat",
|
||||
"Starts With": "Begint met",
|
||||
"Exact Match": "Exacte overeenkomst",
|
||||
"GET": "KRIJG",
|
||||
"POST": "POSTE",
|
||||
"PATCH": "BEKIJK",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "VERWIJDEREN",
|
||||
"HEAD": "HOOFD",
|
||||
"New Task": "Nieuwe taak",
|
||||
"New or Updated Task": "Nieuwe of bijgewerkte taak",
|
||||
"New List": "Nieuwe lijst",
|
||||
"Task Completed": "Taak voltooid",
|
||||
"Triggers when a new task is created.": "Triggert wanneer een nieuwe taak is aangemaakt.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Triggert wanneer een nieuwe taak is aangemaakt of een bestaande taak is bijgewerkt.",
|
||||
"Triggers when a new task list is created.": "Triggert wanneer een nieuwe takenlijst is aangemaakt.",
|
||||
"Triggers when a task is completed in a specific list.": "Activeert wanneer een taak is voltooid in een specifieke lijst.",
|
||||
"The list to watch for completed tasks.": "De lijst om te kijken voor voltooide taken."
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Gerenciamento de tarefas baseado em nuvem.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Entre no [Microsoft Azure Portal](https://portal.azure.com/).\n. Na barra lateral esquerda, vá até **Microsoft Enfra ID**.\n3. Sob **Gerenciar**, clique em **Aplicativos registrados**.\n4. Clique no botão **Novo registro**.\n5. Digite um **Nome** para o seu aplicativo.\n6. Para **Tipos de conta suportados**, escolha:\n - **Contas em qualquer diretório organizacional (qualquer inquilino de ID da Microsoft Entra - Multitenant) e contas pessoais da Microsoft**\n - Ou selecione com base nos seus requisitos.\n7. Em **URI de redirecionamento**, selecione **Web** e adicione a URL fornecida.\n8. Clique em **Registrar**.\n9. Após o registro, você será redirecionado para a página de visão geral do aplicativo. Copie o **ID do aplicativo (cliente) **.\n10. No menu da esquerda, vá para **Certificados e segredos**.\n - Em **Segredos do cliente**, clique em **Novo segredo do cliente**.\n - Fornece uma descrição, define um vencimento e clique em **Adicionar**.\n - Copiar o **Valor** do segredo do cliente (isso não será exibido novamente).\n11. Vá para **permissões de API** no menu à esquerda.\n - Clique em **Adicionar uma permissão**.\n - Selecione **Microsoft Graph** → **Delegated permissions**.\n - Adicione os seguintes escopos:\n - Usuário. assim\n - Tarefas. eadWrite \n - offline_access\n - Clique em **Adicionar permissões**.\n12. Copie seu **ID do Cliente** e **Segredo do Cliente**.\n",
|
||||
"Create Task": "Criar tarefa",
|
||||
"Create Task List": "Criar Lista de Tarefas",
|
||||
"Update Task": "Atualizar Tarefa",
|
||||
"Update Task List": "Atualizar Lista de Tarefas",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Excluir Tarefa",
|
||||
"Add an Attachment": "Adicionar um anexo",
|
||||
"Get Task": "Obter Tarefa",
|
||||
"Find Task List": "Procurar Lista de Tarefas",
|
||||
"Find Task": "Procurar Tarefa",
|
||||
"Custom API Call": "Chamada de API personalizada",
|
||||
"Creates a new task.": "Cria uma nova tarefa.",
|
||||
"Create a new task list.": "Criar uma nova lista de tarefas.",
|
||||
"Update an existing task.": "Atualizar uma tarefa existente.",
|
||||
"Updates an existing task list.": "Atualiza uma lista de tarefas existente.",
|
||||
"Marks a task as completed.": "Marca uma tarefa como concluída.",
|
||||
"Deletes an existing task.": "Exclui uma tarefa existente.",
|
||||
"Adds an attachment to a task.": "Adiciona um anexo a uma tarefa.",
|
||||
"Gets the details of a specific task.": "Obtém os detalhes de uma tarefa específica.",
|
||||
"Finds a task list by its name.": "Localiza uma lista de tarefas pelo nome dela.",
|
||||
"Finds tasks by title.": "Localiza tarefas por título.",
|
||||
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
|
||||
"Task List": "Lista de tarefas",
|
||||
"Title": "Título",
|
||||
"Body Content": "Conteúdo do corpo",
|
||||
"Importance": "Importância",
|
||||
"Status": "Estado",
|
||||
"Due Date": "Data de vencimento",
|
||||
"Reminder Date": "Data do lembrete",
|
||||
"Start Date": "Data Inicial",
|
||||
"Categories": "categorias",
|
||||
"Task": "Tarefas",
|
||||
"New Name": "Novo Nome",
|
||||
"File": "Arquivo",
|
||||
"Attachment Name (Optional)": "Nome de anexo (opcional)",
|
||||
"Match Type": "Tipo de correspondência",
|
||||
"Task Title": "Título da tarefa",
|
||||
"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)",
|
||||
"The task list to create the task in.": "Lista de tarefas para criar a tarefa",
|
||||
"The title of the task.": "O título da tarefa.",
|
||||
"The body or notes for the task.": "O órgão ou anotações para a tarefa.",
|
||||
"The importance of the task.": "A importância da tarefa.",
|
||||
"The status of the task.": "O estado da tarefa.",
|
||||
"The date and time the task is scheduled to start.": "A data e a hora de início da tarefa",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Categorias separadas por vírgulas para a tarefa (por exemplo, Trabalho, Pessoal).",
|
||||
"The name for the new task list.": "O nome para a nova lista de tarefas.",
|
||||
"The task list containing the task to update.": "A lista de tarefas que contém a tarefa a atualizar.",
|
||||
"The task to update.": "A tarefa a atualizar.",
|
||||
"The task list to update.": "A lista de tarefas para atualizar.",
|
||||
"The new name for the task list.": "O novo nome para a lista de tarefas.",
|
||||
"The task list containing the task you want to complete.": "A lista de tarefas que você deseja concluir.",
|
||||
"The specific task to mark as complete.": "A tarefa específica a marcar como concluída.",
|
||||
"The list containing the task you want to delete.": "A lista que contém a tarefa que você deseja excluir.",
|
||||
"The specific task to delete.": "A tarefa específica para excluir.",
|
||||
"The task list that contains the task.": "A lista de tarefas que contém a tarefa.",
|
||||
"The task to which you are adding the attachment.": "A tarefa à qual você está adicionando o anexo.",
|
||||
"The file to attach (up to 25 MB supported).": "O arquivo a ser anexado (até 25 MB suportado).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "O nome a ser exibido para o anexo. Se deixado em branco, será usado o nome de arquivo original.",
|
||||
"The list containing the task you want to retrieve.": "A lista que contém a tarefa que você deseja recuperar.",
|
||||
"The specific task to retrieve.": "A tarefa específica a ser recuperada.",
|
||||
"The name (or partial name) of the task list to find.": "O nome (ou nome parcial) da lista de tarefas para encontrar.",
|
||||
"How to match the list name.": "Como corresponder ao nome da lista.",
|
||||
"Select a specific task list to search within.": "Selecione uma lista de tarefas específica para pesquisar dentro de casa.",
|
||||
"The title (or partial title) of the task to find.": "O título (ou título parcial) da tarefa a ser encontrada.",
|
||||
"How to match the task title.": "Como combinar o título da tarefa.",
|
||||
"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..",
|
||||
"Low": "baixa",
|
||||
"Normal": "normal",
|
||||
"High": "alta",
|
||||
"Not Started": "Não Iniciado",
|
||||
"In Progress": "Em Execução",
|
||||
"Completed": "Concluído",
|
||||
"Waiting On Others": "Esperando em outros",
|
||||
"Deferred": "Adiado",
|
||||
"Contains": "contém",
|
||||
"Starts With": "Começa com",
|
||||
"Exact Match": "Partida exata",
|
||||
"GET": "OBTER",
|
||||
"POST": "POSTAR",
|
||||
"PATCH": "COMPRAR",
|
||||
"PUT": "COLOCAR",
|
||||
"DELETE": "EXCLUIR",
|
||||
"HEAD": "CABEÇA",
|
||||
"New Task": "Nova tarefa",
|
||||
"New or Updated Task": "Tarefa nova ou atualizada",
|
||||
"New List": "Nova Lista",
|
||||
"Task Completed": "Tarefa concluída",
|
||||
"Triggers when a new task is created.": "Dispara quando uma nova tarefa é criada.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Dispara quando uma nova tarefa é criada ou uma tarefa existente é atualizada.",
|
||||
"Triggers when a new task list is created.": "Dispara quando uma nova lista de tarefas é criada.",
|
||||
"Triggers when a task is completed in a specific list.": "Aciona quando uma tarefa é concluída em uma lista específica.",
|
||||
"The list to watch for completed tasks.": "A lista para visualizar as tarefas concluídas."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Microsoft To Do": "Microsoft To Do",
|
||||
"Cloud based task management application.": "Облачное приложение для управления задачами.",
|
||||
"Authenticate with your Microsoft Account. You will need to register an application in the Microsoft Entra admin center.Add **Tasks.ReadWrite**,**User.Read**, **offline_access** scopes.": "Авторизуйтесь с учетной записью Майкрософт. Вам нужно зарегистрировать приложение в области администрирования Microsoft Entra. Добавить **Tasks.ReadWrite**,**User.Read**, **offline_access** .",
|
||||
"Create Task": "Создать задачу",
|
||||
"Create Task List": "Создать список задач",
|
||||
"Update Task": "Обновить задачу",
|
||||
"Find Task List": "Найти список задач",
|
||||
"Find Task": "Найти задачу",
|
||||
"Custom API Call": "Пользовательский вызов API",
|
||||
"Creates a new task.": "Создает новую задачу.",
|
||||
"Create a new task list.": "Создать новый список задач.",
|
||||
"Update an existing task.": "Обновить существующую задачу.",
|
||||
"Finds a task list by its name.": "Находит список задач по его имени.",
|
||||
"Finds tasks by title.": "Ищет задачи по названию.",
|
||||
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
|
||||
"Task List": "Список задач",
|
||||
"Title": "Заголовок",
|
||||
"Body Content": "Содержание тела",
|
||||
"Importance": "Важность",
|
||||
"Status": "Статус",
|
||||
"Due Date": "Срок сдачи",
|
||||
"Reminder Date": "Напоминание Дата",
|
||||
"Start Date": "Дата начала",
|
||||
"Categories": "Категории",
|
||||
"Task": "Задача",
|
||||
"Match Type": "Тип матча",
|
||||
"Task Title": "Название задачи",
|
||||
"Method": "Метод",
|
||||
"Headers": "Заголовки",
|
||||
"Query Parameters": "Параметры запроса",
|
||||
"Body": "Тело",
|
||||
"No Error on Failure": "Нет ошибок при ошибке",
|
||||
"Timeout (in seconds)": "Таймаут (в секундах)",
|
||||
"The task list to create the task in.": "Список задач для создания задачи.",
|
||||
"The title of the task.": "Название задачи.",
|
||||
"The body or notes for the task.": "Тело или примечания для задачи.",
|
||||
"The importance of the task.": "Важность этой задачи.",
|
||||
"The status of the task.": "Статус задачи.",
|
||||
"The date and time the task is scheduled to start.": "Дата и время начала задачи.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Категории, разделенные запятыми (например, Работа, Личная).",
|
||||
"The name for the new task list.": "Имя для нового списка задач.",
|
||||
"The task list containing the task to update.": "Список задач, содержащий задачу для обновления.",
|
||||
"The task to update.": "Задача для обновления.",
|
||||
"The name (or partial name) of the task list to find.": "Имя (или частичное имя) списка задач для поиска.",
|
||||
"How to match the list name.": "Как найти имя списка.",
|
||||
"Select a specific task list to search within.": "Выберите конкретный список задач для поиска.",
|
||||
"The title (or partial title) of the task to find.": "Заголовок (или частичное название) задачи найти.",
|
||||
"How to match the task title.": "Как соответствовать названию задачи.",
|
||||
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
|
||||
"Low": "Низкий",
|
||||
"Normal": "Обычный",
|
||||
"High": "Высокий",
|
||||
"Not Started": "Не начато",
|
||||
"In Progress": "В процессе",
|
||||
"Completed": "Выполнено",
|
||||
"Waiting On Others": "Ожидание на других",
|
||||
"Deferred": "Отложено",
|
||||
"Contains": "Содержит",
|
||||
"Starts With": "Начинается с",
|
||||
"Exact Match": "Точное совпадение",
|
||||
"GET": "ПОЛУЧИТЬ",
|
||||
"POST": "ПОСТ",
|
||||
"PATCH": "ПАТЧ",
|
||||
"PUT": "ПОКУПИТЬ",
|
||||
"DELETE": "УДАЛИТЬ",
|
||||
"HEAD": "HEAD",
|
||||
"New Task": "Новая задача",
|
||||
"New or Updated Task": "Новая или Обновленная задача",
|
||||
"Triggers when a new task is created.": "Триггеры при создании новой задачи.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Триггеры при создании новой задачи или обновлении существующей задачи."
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Cloud based task management application.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - User.Read\n - Tasks.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Create Task": "Create Task",
|
||||
"Create Task List": "Create Task List",
|
||||
"Update Task": "Update Task",
|
||||
"Update Task List": "Update Task List",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Delete Task",
|
||||
"Add an Attachment": "Add an Attachment",
|
||||
"Get Task": "Get Task",
|
||||
"Find Task List": "Find Task List",
|
||||
"Find Task": "Find Task",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new task.": "Creates a new task.",
|
||||
"Create a new task list.": "Create a new task list.",
|
||||
"Update an existing task.": "Update an existing task.",
|
||||
"Updates an existing task list.": "Updates an existing task list.",
|
||||
"Marks a task as completed.": "Marks a task as completed.",
|
||||
"Deletes an existing task.": "Deletes an existing task.",
|
||||
"Adds an attachment to a task.": "Adds an attachment to a task.",
|
||||
"Gets the details of a specific task.": "Gets the details of a specific task.",
|
||||
"Finds a task list by its name.": "Finds a task list by its name.",
|
||||
"Finds tasks by title.": "Finds tasks by title.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Task List": "Task List",
|
||||
"Title": "Title",
|
||||
"Body Content": "Body Content",
|
||||
"Importance": "Importance",
|
||||
"Status": "Status",
|
||||
"Due Date": "Due Date",
|
||||
"Reminder Date": "Reminder Date",
|
||||
"Start Date": "Start Date",
|
||||
"Categories": "Categories",
|
||||
"Task": "Task",
|
||||
"New Name": "New Name",
|
||||
"File": "File",
|
||||
"Attachment Name (Optional)": "Attachment Name (Optional)",
|
||||
"Match Type": "Match Type",
|
||||
"Task Title": "Task Title",
|
||||
"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)",
|
||||
"The task list to create the task in.": "The task list to create the task in.",
|
||||
"The title of the task.": "The title of the task.",
|
||||
"The body or notes for the task.": "The body or notes for the task.",
|
||||
"The importance of the task.": "The importance of the task.",
|
||||
"The status of the task.": "The status of the task.",
|
||||
"The date and time the task is scheduled to start.": "The date and time the task is scheduled to start.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Comma-separated categories for the task (e.g., Work, Personal).",
|
||||
"The name for the new task list.": "The name for the new task list.",
|
||||
"The task list containing the task to update.": "The task list containing the task to update.",
|
||||
"The task to update.": "The task to update.",
|
||||
"The task list to update.": "The task list to update.",
|
||||
"The new name for the task list.": "The new name for the task list.",
|
||||
"The task list containing the task you want to complete.": "The task list containing the task you want to complete.",
|
||||
"The specific task to mark as complete.": "The specific task to mark as complete.",
|
||||
"The list containing the task you want to delete.": "The list containing the task you want to delete.",
|
||||
"The specific task to delete.": "The specific task to delete.",
|
||||
"The task list that contains the task.": "The task list that contains the task.",
|
||||
"The task to which you are adding the attachment.": "The task to which you are adding the attachment.",
|
||||
"The file to attach (up to 25 MB supported).": "The file to attach (up to 25 MB supported).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "The name to display for the attachment. If left blank, the original filename will be used.",
|
||||
"The list containing the task you want to retrieve.": "The list containing the task you want to retrieve.",
|
||||
"The specific task to retrieve.": "The specific task to retrieve.",
|
||||
"The name (or partial name) of the task list to find.": "The name (or partial name) of the task list to find.",
|
||||
"How to match the list name.": "How to match the list name.",
|
||||
"Select a specific task list to search within.": "Select a specific task list to search within.",
|
||||
"The title (or partial title) of the task to find.": "The title (or partial title) of the task to find.",
|
||||
"How to match the task title.": "How to match the task title.",
|
||||
"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..",
|
||||
"Low": "Low",
|
||||
"Normal": "Normal",
|
||||
"High": "High",
|
||||
"Not Started": "Not Started",
|
||||
"In Progress": "In Progress",
|
||||
"Completed": "Completed",
|
||||
"Waiting On Others": "Waiting On Others",
|
||||
"Deferred": "Deferred",
|
||||
"Contains": "Contains",
|
||||
"Starts With": "Starts With",
|
||||
"Exact Match": "Exact Match",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Task": "New Task",
|
||||
"New or Updated Task": "New or Updated Task",
|
||||
"New List": "New List",
|
||||
"Task Completed": "Task Completed",
|
||||
"Triggers when a new task is created.": "Triggers when a new task is created.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Triggers when a new task is created or an existing task is updated.",
|
||||
"Triggers when a new task list is created.": "Triggers when a new task list is created.",
|
||||
"Triggers when a task is completed in a specific list.": "Triggers when a task is completed in a specific list.",
|
||||
"The list to watch for completed tasks.": "The list to watch for completed tasks."
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"Microsoft To Do": "Microsoft To Do",
|
||||
"Cloud based task management application.": "Cloud based task management application.",
|
||||
"Authenticate with your Microsoft Account. You will need to register an application in the Microsoft Entra admin center.Add **Tasks.ReadWrite**,**User.Read**, **offline_access** scopes.": "Authenticate with your Microsoft Account. You will need to register an application in the Microsoft Entra admin center.Add **Tasks.ReadWrite**,**User.Read**, **offline_access** scopes.",
|
||||
"Create Task": "Create Task",
|
||||
"Create Task List": "Create Task List",
|
||||
"Update Task": "Update Task",
|
||||
"Find Task List": "Find Task List",
|
||||
"Find Task": "Find Task",
|
||||
"Custom API Call": "Custom API Call",
|
||||
"Creates a new task.": "Creates a new task.",
|
||||
"Create a new task list.": "Create a new task list.",
|
||||
"Update an existing task.": "Update an existing task.",
|
||||
"Finds a task list by its name.": "Finds a task list by its name.",
|
||||
"Finds tasks by title.": "Finds tasks by title.",
|
||||
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
|
||||
"Task List": "Task List",
|
||||
"Title": "Title",
|
||||
"Body Content": "Body Content",
|
||||
"Importance": "Importance",
|
||||
"Status": "Status",
|
||||
"Due Date": "Due Date",
|
||||
"Reminder Date": "Reminder Date",
|
||||
"Start Date": "Start Date",
|
||||
"Categories": "Categories",
|
||||
"Task": "Task",
|
||||
"Match Type": "Match Type",
|
||||
"Task Title": "Task Title",
|
||||
"Method": "Method",
|
||||
"Headers": "Headers",
|
||||
"Query Parameters": "Query Parameters",
|
||||
"Body": "Body",
|
||||
"No Error on Failure": "No Error on Failure",
|
||||
"Timeout (in seconds)": "Timeout (in seconds)",
|
||||
"The task list to create the task in.": "The task list to create the task in.",
|
||||
"The title of the task.": "The title of the task.",
|
||||
"The body or notes for the task.": "The body or notes for the task.",
|
||||
"The importance of the task.": "The importance of the task.",
|
||||
"The status of the task.": "The status of the task.",
|
||||
"The date and time the task is scheduled to start.": "The date and time the task is scheduled to start.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Comma-separated categories for the task (e.g., Work, Personal).",
|
||||
"The name for the new task list.": "The name for the new task list.",
|
||||
"The task list containing the task to update.": "The task list containing the task to update.",
|
||||
"The task to update.": "The task to update.",
|
||||
"The name (or partial name) of the task list to find.": "The name (or partial name) of the task list to find.",
|
||||
"How to match the list name.": "How to match the list name.",
|
||||
"Select a specific task list to search within.": "Select a specific task list to search within.",
|
||||
"The title (or partial title) of the task to find.": "The title (or partial title) of the task to find.",
|
||||
"How to match the task title.": "How to match the task title.",
|
||||
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
|
||||
"Low": "Low",
|
||||
"Normal": "Normal",
|
||||
"High": "High",
|
||||
"Not Started": "Not Started",
|
||||
"In Progress": "In Progress",
|
||||
"Completed": "Completed",
|
||||
"Waiting On Others": "Waiting On Others",
|
||||
"Deferred": "Deferred",
|
||||
"Contains": "Contains",
|
||||
"Starts With": "Starts With",
|
||||
"Exact Match": "Exact Match",
|
||||
"GET": "GET",
|
||||
"POST": "POST",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "PUT",
|
||||
"DELETE": "DELETE",
|
||||
"HEAD": "HEAD",
|
||||
"New Task": "New Task",
|
||||
"New or Updated Task": "New or Updated Task",
|
||||
"Triggers when a new task is created.": "Triggers when a new task is created.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Triggers when a new task is created or an existing task is updated."
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Cloud based task management application.": "Cloud based task management application.",
|
||||
"\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and ad": "\n1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).\n2. From the left sidebar, go to **Microsoft Enfra ID**.\n3. Under **Manage**, click on **App registrations**.\n4. Click the **New registration** button.\n5. Enter a **Name** for your app.\n6. For **Supported account types**, choose:\n - **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**\n - Or select based on your requirement.\n7. In **Redirect URI**, select **Web** and add the given URL.\n8. Click **Register**.\n9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.\n10. From the left menu, go to **Certificates & secrets**.\n - Under **Client secrets**, click **New client secret**.\n - Provide a description, set an expiry, and click **Add**.\n - Copy the **Value** of the client secret (this will not be shown again).\n11. Go to **API permissions** from the left menu.\n - Click **Add a permission**.\n - Select **Microsoft Graph** → **Delegated permissions**.\n - Add the following scopes:\n - User.Read\n - Tasks.ReadWrite\n - offline_access\n - Click **Add permissions**.\n12. Copy your **Client ID** and **Client Secret**.\n",
|
||||
"Create Task": "Create Task",
|
||||
"Create Task List": "Create Task List",
|
||||
"Update Task": "Update Task",
|
||||
"Update Task List": "Update Task List",
|
||||
"Complete Task": "Complete Task",
|
||||
"Delete Task": "Delete Task",
|
||||
"Add an Attachment": "Add an Attachment",
|
||||
"Get Task": "Get Task",
|
||||
"Find Task List": "Find Task List",
|
||||
"Find Task": "Find Task",
|
||||
"Custom API Call": "自定义 API 呼叫",
|
||||
"Creates a new task.": "Creates a new task.",
|
||||
"Create a new task list.": "Create a new task list.",
|
||||
"Update an existing task.": "Update an existing task.",
|
||||
"Updates an existing task list.": "Updates an existing task list.",
|
||||
"Marks a task as completed.": "Marks a task as completed.",
|
||||
"Deletes an existing task.": "Deletes an existing task.",
|
||||
"Adds an attachment to a task.": "Adds an attachment to a task.",
|
||||
"Gets the details of a specific task.": "Gets the details of a specific task.",
|
||||
"Finds a task list by its name.": "Finds a task list by its name.",
|
||||
"Finds tasks by title.": "Finds tasks by title.",
|
||||
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
|
||||
"Task List": "Task List",
|
||||
"Title": "标题",
|
||||
"Body Content": "Body Content",
|
||||
"Importance": "Importance",
|
||||
"Status": "状态",
|
||||
"Due Date": "Due Date",
|
||||
"Reminder Date": "Reminder Date",
|
||||
"Start Date": "Start Date",
|
||||
"Categories": "Categories",
|
||||
"Task": "Task",
|
||||
"New Name": "New Name",
|
||||
"File": "文件",
|
||||
"Attachment Name (Optional)": "Attachment Name (Optional)",
|
||||
"Match Type": "Match Type",
|
||||
"Task Title": "Task Title",
|
||||
"Method": "方法",
|
||||
"Headers": "信头",
|
||||
"Query Parameters": "查询参数",
|
||||
"Body": "正文内容",
|
||||
"Response is Binary ?": "Response is Binary ?",
|
||||
"No Error on Failure": "失败时没有错误",
|
||||
"Timeout (in seconds)": "超时(秒)",
|
||||
"The task list to create the task in.": "The task list to create the task in.",
|
||||
"The title of the task.": "The title of the task.",
|
||||
"The body or notes for the task.": "The body or notes for the task.",
|
||||
"The importance of the task.": "The importance of the task.",
|
||||
"The status of the task.": "The status of the task.",
|
||||
"The date and time the task is scheduled to start.": "The date and time the task is scheduled to start.",
|
||||
"Comma-separated categories for the task (e.g., Work, Personal).": "Comma-separated categories for the task (e.g., Work, Personal).",
|
||||
"The name for the new task list.": "The name for the new task list.",
|
||||
"The task list containing the task to update.": "The task list containing the task to update.",
|
||||
"The task to update.": "The task to update.",
|
||||
"The task list to update.": "The task list to update.",
|
||||
"The new name for the task list.": "The new name for the task list.",
|
||||
"The task list containing the task you want to complete.": "The task list containing the task you want to complete.",
|
||||
"The specific task to mark as complete.": "The specific task to mark as complete.",
|
||||
"The list containing the task you want to delete.": "The list containing the task you want to delete.",
|
||||
"The specific task to delete.": "The specific task to delete.",
|
||||
"The task list that contains the task.": "The task list that contains the task.",
|
||||
"The task to which you are adding the attachment.": "The task to which you are adding the attachment.",
|
||||
"The file to attach (up to 25 MB supported).": "The file to attach (up to 25 MB supported).",
|
||||
"The name to display for the attachment. If left blank, the original filename will be used.": "The name to display for the attachment. If left blank, the original filename will be used.",
|
||||
"The list containing the task you want to retrieve.": "The list containing the task you want to retrieve.",
|
||||
"The specific task to retrieve.": "The specific task to retrieve.",
|
||||
"The name (or partial name) of the task list to find.": "The name (or partial name) of the task list to find.",
|
||||
"How to match the list name.": "How to match the list name.",
|
||||
"Select a specific task list to search within.": "Select a specific task list to search within.",
|
||||
"The title (or partial title) of the task to find.": "The title (or partial title) of the task to find.",
|
||||
"How to match the task title.": "How to match the task title.",
|
||||
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
|
||||
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
|
||||
"Low": "Low",
|
||||
"Normal": "Normal",
|
||||
"High": "High",
|
||||
"Not Started": "Not Started",
|
||||
"In Progress": "In Progress",
|
||||
"Completed": "Completed",
|
||||
"Waiting On Others": "Waiting On Others",
|
||||
"Deferred": "Deferred",
|
||||
"Contains": "Contains",
|
||||
"Starts With": "Starts With",
|
||||
"Exact Match": "精确匹配",
|
||||
"GET": "获取",
|
||||
"POST": "帖子",
|
||||
"PATCH": "PATCH",
|
||||
"PUT": "弹出",
|
||||
"DELETE": "删除",
|
||||
"HEAD": "黑色",
|
||||
"New Task": "New Task",
|
||||
"New or Updated Task": "New or Updated Task",
|
||||
"New List": "New List",
|
||||
"Task Completed": "Task Completed",
|
||||
"Triggers when a new task is created.": "Triggers when a new task is created.",
|
||||
"Triggers when a new task is created or an existing task is updated.": "Triggers when a new task is created or an existing task is updated.",
|
||||
"Triggers when a new task list is created.": "Triggers when a new task list is created.",
|
||||
"Triggers when a task is completed in a specific list.": "Triggers when a task is completed in a specific list.",
|
||||
"The list to watch for completed tasks.": "The list to watch for completed tasks."
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import { createPiece, OAuth2PropertyValue, PieceAuth } from '@activepieces/pieces-framework';
|
||||
import { PieceCategory } from '@activepieces/shared';
|
||||
import { createCustomApiCallAction } from '@activepieces/pieces-common';
|
||||
|
||||
|
||||
import { createTask } from './lib/actions/create-task';
|
||||
import { createTaskListAction } from './lib/actions/create-task-list';
|
||||
import { updateTaskListAction } from './lib/actions/update-task-list';
|
||||
import { updateTaskAction } from './lib/actions/update-task';
|
||||
import { completeTaskAction } from './lib/actions/complete-task';
|
||||
import { addAttachmentAction } from './lib/actions/add-attachment';
|
||||
import { getTaskAction } from './lib/actions/get-task';
|
||||
import { deleteTaskAction } from './lib/actions/delete-task';
|
||||
import { findTaskListByNameAction } from './lib/actions/find-task-list-by-name';
|
||||
import { findTaskByTitleAction } from './lib/actions/find-task-by-title';
|
||||
|
||||
|
||||
import { newTaskCreatedTrigger } from './lib/triggers/new-task-created';
|
||||
import { newOrUpdatedTaskTrigger } from './lib/triggers/task-updated';
|
||||
import { newListCreatedTrigger } from './lib/triggers/new-list-created';
|
||||
import { taskCompletedTrigger } from './lib/triggers/task-completed';
|
||||
|
||||
|
||||
const authDesc = `
|
||||
1. Sign in to [Microsoft Azure Portal](https://portal.azure.com/).
|
||||
2. From the left sidebar, go to **Microsoft Enfra ID**.
|
||||
3. Under **Manage**, click on **App registrations**.
|
||||
4. Click the **New registration** button.
|
||||
5. Enter a **Name** for your app.
|
||||
6. For **Supported account types**, choose:
|
||||
- **Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts**
|
||||
- Or select based on your requirement.
|
||||
7. In **Redirect URI**, select **Web** and add the given URL.
|
||||
8. Click **Register**.
|
||||
9. After registration, you’ll be redirected to the app’s overview page. Copy the **Application (client) ID**.
|
||||
10. From the left menu, go to **Certificates & secrets**.
|
||||
- Under **Client secrets**, click **New client secret**.
|
||||
- Provide a description, set an expiry, and click **Add**.
|
||||
- Copy the **Value** of the client secret (this will not be shown again).
|
||||
11. Go to **API permissions** from the left menu.
|
||||
- Click **Add a permission**.
|
||||
- Select **Microsoft Graph** → **Delegated permissions**.
|
||||
- Add the following scopes:
|
||||
- User.Read
|
||||
- Tasks.ReadWrite
|
||||
- offline_access
|
||||
- Click **Add permissions**.
|
||||
12. Copy your **Client ID** and **Client Secret**.
|
||||
`;
|
||||
|
||||
export const microsoftToDoAuth = PieceAuth.OAuth2({
|
||||
description: authDesc,
|
||||
authUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
|
||||
tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
|
||||
required: true,
|
||||
scope: ['Tasks.ReadWrite', 'User.Read', 'offline_access'],
|
||||
prompt: 'omit'
|
||||
});
|
||||
|
||||
export const microsoftTodo = createPiece({
|
||||
displayName: 'Microsoft To Do',
|
||||
description: 'Cloud based task management application.',
|
||||
categories: [PieceCategory.PRODUCTIVITY],
|
||||
auth: microsoftToDoAuth,
|
||||
minimumSupportedRelease: '0.36.1',
|
||||
logoUrl: 'https://cdn.activepieces.com/pieces/microsoft-todo.png',
|
||||
authors: ['onyedikachi-david','david-oluwaseun420'],
|
||||
actions: [
|
||||
createTask,
|
||||
createTaskListAction,
|
||||
updateTaskAction,
|
||||
updateTaskListAction,
|
||||
completeTaskAction,
|
||||
deleteTaskAction,
|
||||
addAttachmentAction,
|
||||
getTaskAction,
|
||||
findTaskListByNameAction,
|
||||
findTaskByTitleAction,
|
||||
createCustomApiCallAction({
|
||||
baseUrl: () => 'https://graph.microsoft.com/v1.0/me/todo',
|
||||
auth: microsoftToDoAuth,
|
||||
authMapping: async (auth) => ({
|
||||
Authorization: `Bearer ${(auth as OAuth2PropertyValue).access_token}`,
|
||||
}),
|
||||
}),
|
||||
],
|
||||
triggers: [
|
||||
newTaskCreatedTrigger,
|
||||
newOrUpdatedTaskTrigger,
|
||||
newListCreatedTrigger,
|
||||
taskCompletedTrigger,
|
||||
],
|
||||
});
|
||||
@@ -0,0 +1,143 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown, getTasksInListDropdown } from '../common';
|
||||
import { TaskFileAttachment } from '@microsoft/microsoft-graph-types';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
|
||||
export const addAttachmentAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'add_attachment',
|
||||
displayName: 'Add an Attachment',
|
||||
description: 'Adds an attachment to a task.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The task list that contains the task.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
task_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task',
|
||||
description: 'The task to which you are adding the attachment.',
|
||||
required: true,
|
||||
refreshers: ['task_list_id'],
|
||||
options: async ({ auth, task_list_id }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token || !task_list_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: !authValue?.access_token
|
||||
? 'Connect your account first'
|
||||
: 'Select a task list first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTasksInListDropdown(authValue, task_list_id as string);
|
||||
},
|
||||
}),
|
||||
file: Property.File({
|
||||
displayName: 'File',
|
||||
description: 'The file to attach (up to 25 MB supported).',
|
||||
required: true,
|
||||
}),
|
||||
filename: Property.ShortText({
|
||||
displayName: 'Attachment Name (Optional)',
|
||||
description: 'The name to display for the attachment. If left blank, the original filename will be used.',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { task_list_id, task_id, file, filename } = propsValue;
|
||||
|
||||
if (!task_list_id || !task_id) {
|
||||
throw new Error('Task List ID and Task ID are required');
|
||||
}
|
||||
|
||||
if (!file || !file.data) {
|
||||
throw new Error('File or file data is missing. Please provide a valid file.');
|
||||
}
|
||||
|
||||
const fileSizeInBytes = file.data.length;
|
||||
const fileSizeInMB = fileSizeInBytes / (1024 * 1024);
|
||||
const attachmentName = filename || file.filename;
|
||||
|
||||
if (fileSizeInMB > 25) {
|
||||
throw new Error(`File size (${fileSizeInMB.toFixed(2)} MB) exceeds the 25 MB limit.`);
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
if (fileSizeInMB < 3) {
|
||||
const attachmentBody = {
|
||||
'@odata.type': '#microsoft.graph.taskFileAttachment',
|
||||
name: attachmentName,
|
||||
contentBytes: file.data.toString('base64'),
|
||||
contentType: file.extension ? `application/${file.extension}` : 'application/octet-stream',
|
||||
};
|
||||
|
||||
const response = await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks/${task_id}/attachments`)
|
||||
.post(attachmentBody);
|
||||
|
||||
return response as TaskFileAttachment;
|
||||
}
|
||||
|
||||
const uploadSession = await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks/${task_id}/attachments/createUploadSession`)
|
||||
.post({
|
||||
attachmentInfo: {
|
||||
attachmentType: 'file',
|
||||
name: attachmentName,
|
||||
size: fileSizeInBytes,
|
||||
},
|
||||
});
|
||||
|
||||
const uploadUrl = uploadSession.uploadUrl;
|
||||
const chunkSize = 4 * 1024 * 1024;
|
||||
let uploadedBytes = 0;
|
||||
|
||||
while (uploadedBytes < fileSizeInBytes) {
|
||||
const chunkEnd = Math.min(uploadedBytes + chunkSize, fileSizeInBytes);
|
||||
const chunk = file.data.slice(uploadedBytes, chunkEnd);
|
||||
const contentRange = `bytes ${uploadedBytes}-${chunkEnd - 1}/${fileSizeInBytes}`;
|
||||
|
||||
const uploadResponse = await client
|
||||
.api(uploadUrl)
|
||||
.headers({
|
||||
'Content-Length': chunk.length.toString(),
|
||||
'Content-Range': contentRange,
|
||||
'Content-Type': 'application/octet-stream',
|
||||
})
|
||||
.put(chunk);
|
||||
|
||||
uploadedBytes = chunkEnd;
|
||||
|
||||
if (uploadedBytes >= fileSizeInBytes) {
|
||||
return uploadResponse as TaskFileAttachment;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error('Upload completed but no response received');
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to add attachment: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,83 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown, getIncompleteTasksInListDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const completeTaskAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'complete_task',
|
||||
displayName: 'Complete Task',
|
||||
description: 'Marks a task as completed.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The task list containing the task you want to complete.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
task_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task',
|
||||
description: 'The specific task to mark as complete.',
|
||||
required: true,
|
||||
refreshers: ['task_list_id'],
|
||||
options: async ({ auth, task_list_id }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token || !task_list_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: !authValue?.access_token
|
||||
? 'Connect your account first'
|
||||
: 'Select a task list first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getIncompleteTasksInListDropdown(authValue, task_list_id as string);
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { task_list_id, task_id } = propsValue;
|
||||
|
||||
if (!task_list_id || !task_id) {
|
||||
throw new Error('Task List ID and Task ID are required');
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const taskUpdate: Partial<TodoTask> = {
|
||||
status: 'completed',
|
||||
completedDateTime: {
|
||||
dateTime: new Date().toISOString(),
|
||||
timeZone: 'UTC',
|
||||
},
|
||||
};
|
||||
|
||||
const response = await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks/${task_id}`)
|
||||
.update(taskUpdate);
|
||||
|
||||
return response as TodoTask;
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to complete task: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,32 @@
|
||||
import { Property, createAction } from '@activepieces/pieces-framework';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
|
||||
export const createTaskListAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'create_task_list',
|
||||
displayName: 'Create Task List',
|
||||
description: 'Create a new task list.',
|
||||
props: {
|
||||
displayName: Property.ShortText({
|
||||
displayName: 'Title',
|
||||
description: 'The name for the new task list.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response = await client.api('/me/todo/lists').post({
|
||||
displayName: propsValue.displayName,
|
||||
});
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,152 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { Importance, TaskStatus, TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const createTask = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'create_task',
|
||||
displayName: 'Create Task',
|
||||
description: 'Creates a new task.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The task list to create the task in.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
title: Property.ShortText({
|
||||
displayName: 'Title',
|
||||
description: 'The title of the task.',
|
||||
required: true,
|
||||
}),
|
||||
body_content: Property.LongText({
|
||||
displayName: 'Body Content',
|
||||
description: 'The body or notes for the task.',
|
||||
required: false,
|
||||
}),
|
||||
importance: Property.StaticDropdown({
|
||||
displayName: 'Importance',
|
||||
description: 'The importance of the task.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Low', value: 'low' },
|
||||
{ label: 'Normal', value: 'normal' },
|
||||
{ label: 'High', value: 'high' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Status',
|
||||
description: 'The status of the task.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Not Started', value: 'notStarted' },
|
||||
{ label: 'In Progress', value: 'inProgress' },
|
||||
{ label: 'Completed', value: 'completed' },
|
||||
{ label: 'Waiting On Others', value: 'waitingOnOthers' },
|
||||
{ label: 'Deferred', value: 'deferred' },
|
||||
],
|
||||
},
|
||||
defaultValue: 'notStarted',
|
||||
}),
|
||||
due_date_time: Property.DateTime({
|
||||
displayName: 'Due Date',
|
||||
required: false,
|
||||
}),
|
||||
reminder_date_time: Property.DateTime({
|
||||
displayName: 'Reminder Date',
|
||||
required: false,
|
||||
}),
|
||||
start_date_time: Property.DateTime({
|
||||
displayName: 'Start Date',
|
||||
description: 'The date and time the task is scheduled to start.',
|
||||
required: false,
|
||||
}),
|
||||
categories: Property.ShortText({
|
||||
displayName: 'Categories',
|
||||
description: 'Comma-separated categories for the task (e.g., Work, Personal).',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const {
|
||||
task_list_id,
|
||||
title,
|
||||
body_content,
|
||||
importance,
|
||||
status,
|
||||
due_date_time,
|
||||
reminder_date_time,
|
||||
start_date_time,
|
||||
categories,
|
||||
} = propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const taskBody: TodoTask = {
|
||||
title,
|
||||
};
|
||||
|
||||
if (body_content) {
|
||||
taskBody.body = {
|
||||
content: body_content,
|
||||
contentType: 'text',
|
||||
};
|
||||
}
|
||||
|
||||
if (importance) {
|
||||
taskBody.importance = importance as Importance;
|
||||
}
|
||||
|
||||
if (status) {
|
||||
taskBody.status = status as TaskStatus;
|
||||
}
|
||||
|
||||
if (due_date_time) {
|
||||
taskBody.dueDateTime = {
|
||||
dateTime: due_date_time,
|
||||
timeZone: 'UTC',
|
||||
};
|
||||
}
|
||||
|
||||
if (reminder_date_time) {
|
||||
taskBody.isReminderOn = true;
|
||||
taskBody.reminderDateTime = { dateTime: reminder_date_time, timeZone: 'UTC' };
|
||||
}
|
||||
|
||||
if (start_date_time) {
|
||||
taskBody.startDateTime = { dateTime: start_date_time, timeZone: 'UTC' };
|
||||
}
|
||||
|
||||
if (categories) {
|
||||
taskBody.categories = categories
|
||||
.split(',')
|
||||
.map((c) => c.trim())
|
||||
.filter((c) => c.length > 0);
|
||||
}
|
||||
|
||||
const response = await client.api(`/me/todo/lists/${task_list_id}/tasks`).post(taskBody);
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,78 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown, getTasksInListDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
|
||||
export const deleteTaskAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'delete_task',
|
||||
displayName: 'Delete Task',
|
||||
description: 'Deletes an existing task.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The list containing the task you want to delete.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTaskListsDropdown(authValue);
|
||||
},
|
||||
}),
|
||||
task_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task',
|
||||
description: 'The specific task to delete.',
|
||||
required: true,
|
||||
refreshers: ['task_list_id'],
|
||||
options: async ({ auth, task_list_id }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token || !task_list_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: !authValue?.access_token
|
||||
? 'Connect your account first'
|
||||
: 'Select a task list first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTasksInListDropdown(authValue, task_list_id as string);
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { task_list_id, task_id } = propsValue;
|
||||
|
||||
if (!task_list_id || !task_id) {
|
||||
throw new Error('Task List ID and Task ID are required');
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks/${task_id}`)
|
||||
.delete();
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Task deleted successfully.',
|
||||
};
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to delete task: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,91 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
|
||||
import { TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const findTaskByTitleAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'find_task_by_title',
|
||||
displayName: 'Find Task',
|
||||
description: 'Finds tasks by title.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'Select a specific task list to search within.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return { disabled: true, placeholder: 'Connect your account first', options: [] };
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
title: Property.ShortText({
|
||||
displayName: 'Task Title',
|
||||
description: 'The title (or partial title) of the task to find.',
|
||||
required: true,
|
||||
}),
|
||||
|
||||
match_type: Property.StaticDropdown({
|
||||
displayName: 'Match Type',
|
||||
description: 'How to match the task title.',
|
||||
required: false,
|
||||
defaultValue: 'contains',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Contains', value: 'contains' },
|
||||
{ label: 'Starts With', value: 'startsWith' },
|
||||
{ label: 'Exact Match', value: 'exact' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { title, task_list_id, match_type } = propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
let titleFilterString = '';
|
||||
switch (match_type) {
|
||||
case 'startsWith':
|
||||
titleFilterString = `startsWith(title, '${title}')`;
|
||||
break;
|
||||
case 'exact':
|
||||
titleFilterString = `title eq '${title}'`;
|
||||
break;
|
||||
case 'contains':
|
||||
default:
|
||||
titleFilterString = `contains(title, '${title}')`;
|
||||
break;
|
||||
}
|
||||
|
||||
const result = [];
|
||||
|
||||
let response: PageCollection = await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks`)
|
||||
.filter(titleFilterString)
|
||||
.get();
|
||||
|
||||
while (response.value.length > 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
result.push(task);
|
||||
}
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,72 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { TodoTaskList } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const findTaskListByNameAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'find_task_list_by_name',
|
||||
displayName: 'Find Task List',
|
||||
description: 'Finds a task list by its name.',
|
||||
props: {
|
||||
name: Property.ShortText({
|
||||
displayName: 'Title',
|
||||
description: 'The name (or partial name) of the task list to find.',
|
||||
required: true,
|
||||
}),
|
||||
match_type: Property.StaticDropdown({
|
||||
displayName: 'Match Type',
|
||||
description: 'How to match the list name.',
|
||||
required: false,
|
||||
defaultValue: 'contains',
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Contains', value: 'contains' },
|
||||
{ label: 'Starts With', value: 'startsWith' },
|
||||
{ label: 'Exact Match', value: 'exact' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { name, match_type } = propsValue;
|
||||
|
||||
let filterString = '';
|
||||
switch (match_type) {
|
||||
case 'startsWith':
|
||||
filterString = `startsWith(displayName, '${name}')`;
|
||||
break;
|
||||
case 'exact':
|
||||
filterString = `displayName eq '${name}'`;
|
||||
break;
|
||||
case 'contains':
|
||||
default:
|
||||
filterString = `contains(displayName, '${name}')`;
|
||||
break;
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const result = [];
|
||||
|
||||
let response: PageCollection = await client.api('/me/todo/lists').filter(filterString).get();
|
||||
|
||||
while (response.value.length > 0) {
|
||||
for (const list of response.value as TodoTaskList[]) {
|
||||
result.push(list);
|
||||
}
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown, getTasksInListDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const getTaskAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'get_task',
|
||||
displayName: 'Get Task',
|
||||
description: 'Gets the details of a specific task.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The list containing the task you want to retrieve.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTaskListsDropdown(authValue);
|
||||
},
|
||||
}),
|
||||
task_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task',
|
||||
description: 'The specific task to retrieve.',
|
||||
required: true,
|
||||
refreshers: ['task_list_id'],
|
||||
options: async ({ auth, task_list_id }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token || !task_list_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: !authValue?.access_token
|
||||
? 'Connect your account first'
|
||||
: 'Select a task list first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTasksInListDropdown(authValue, task_list_id as string);
|
||||
},
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { task_list_id, task_id } = propsValue;
|
||||
|
||||
if (!task_list_id || !task_id) {
|
||||
throw new Error('Task List ID and Task ID are required');
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const response = await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks/${task_id}`)
|
||||
.get();
|
||||
|
||||
return response as TodoTask;
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to get task: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,69 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { TodoTaskList } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const updateTaskListAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'update_task_list',
|
||||
displayName: 'Update Task List',
|
||||
description: 'Updates an existing task list.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The task list to update.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: 'Connect your account first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTaskListsDropdown(authValue);
|
||||
},
|
||||
}),
|
||||
displayName: Property.ShortText({
|
||||
displayName: 'New Name',
|
||||
description: 'The new name for the task list.',
|
||||
required: true,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const { task_list_id, displayName } = propsValue;
|
||||
|
||||
if (!task_list_id) {
|
||||
throw new Error('Task List ID is required');
|
||||
}
|
||||
|
||||
if (!displayName || displayName.trim().length === 0) {
|
||||
throw new Error('New Name cannot be empty. Please provide a valid name for the task list.');
|
||||
}
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
try {
|
||||
const taskListBody: Partial<TodoTaskList> = {
|
||||
displayName: displayName.trim(),
|
||||
};
|
||||
|
||||
const response = await client
|
||||
.api(`/me/todo/lists/${task_list_id}`)
|
||||
.update(taskListBody);
|
||||
|
||||
return response as TodoTaskList;
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to update task list: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,184 @@
|
||||
import { Property, createAction, OAuth2PropertyValue } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown, getTasksInListDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { Importance, TaskStatus, TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export const updateTaskAction = createAction({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'update_task',
|
||||
displayName: 'Update Task',
|
||||
description: 'Update an existing task.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The task list containing the task to update.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return { disabled: true, placeholder: 'Connect your account first', options: [] };
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
task_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task',
|
||||
description: 'The task to update.',
|
||||
required: true,
|
||||
refreshers: ['task_list_id'],
|
||||
options: async ({ auth, task_list_id }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token || !task_list_id) {
|
||||
return {
|
||||
disabled: true,
|
||||
placeholder: !authValue?.access_token
|
||||
? 'Connect your account first'
|
||||
: 'Select a task list first',
|
||||
options: [],
|
||||
};
|
||||
}
|
||||
return await getTasksInListDropdown(authValue, task_list_id as string);
|
||||
},
|
||||
}),
|
||||
title: Property.ShortText({
|
||||
displayName: 'Title',
|
||||
description: 'The title of the task.',
|
||||
required: false,
|
||||
}),
|
||||
body_content: Property.LongText({
|
||||
displayName: 'Body Content',
|
||||
description: 'The body or notes for the task.',
|
||||
required: false,
|
||||
}),
|
||||
importance: Property.StaticDropdown({
|
||||
displayName: 'Importance',
|
||||
description: 'The importance of the task.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Low', value: 'low' },
|
||||
{ label: 'Normal', value: 'normal' },
|
||||
{ label: 'High', value: 'high' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
status: Property.StaticDropdown({
|
||||
displayName: 'Status',
|
||||
description: 'The status of the task.',
|
||||
required: false,
|
||||
options: {
|
||||
options: [
|
||||
{ label: 'Not Started', value: 'notStarted' },
|
||||
{ label: 'In Progress', value: 'inProgress' },
|
||||
{ label: 'Completed', value: 'completed' },
|
||||
{ label: 'Waiting On Others', value: 'waitingOnOthers' },
|
||||
{ label: 'Deferred', value: 'deferred' },
|
||||
],
|
||||
},
|
||||
}),
|
||||
due_date_time: Property.DateTime({
|
||||
displayName: 'Due Date',
|
||||
required: false,
|
||||
}),
|
||||
reminder_date_time: Property.DateTime({
|
||||
displayName: 'Reminder Date',
|
||||
required: false,
|
||||
}),
|
||||
start_date_time: Property.DateTime({
|
||||
displayName: 'Start Date',
|
||||
description: 'The date and time the task is scheduled to start.',
|
||||
required: false,
|
||||
}),
|
||||
categories: Property.ShortText({
|
||||
displayName: 'Categories',
|
||||
description: 'Comma-separated categories for the task (e.g., Work, Personal).',
|
||||
required: false,
|
||||
}),
|
||||
},
|
||||
async run(context) {
|
||||
const { auth, propsValue } = context;
|
||||
const {
|
||||
task_list_id,
|
||||
task_id,
|
||||
title,
|
||||
body_content,
|
||||
importance,
|
||||
status,
|
||||
due_date_time,
|
||||
reminder_date_time,
|
||||
start_date_time,
|
||||
categories,
|
||||
} = propsValue;
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const taskBody: TodoTask = {
|
||||
title,
|
||||
};
|
||||
|
||||
if (body_content) {
|
||||
taskBody.body = {
|
||||
content: body_content,
|
||||
contentType: 'text',
|
||||
};
|
||||
}
|
||||
|
||||
if (importance) {
|
||||
taskBody.importance = importance as Importance;
|
||||
}
|
||||
|
||||
if (status) {
|
||||
taskBody.status = status as TaskStatus;
|
||||
}
|
||||
|
||||
if (due_date_time) {
|
||||
taskBody.dueDateTime = {
|
||||
dateTime: due_date_time,
|
||||
timeZone: 'UTC',
|
||||
};
|
||||
}
|
||||
|
||||
if (reminder_date_time) {
|
||||
taskBody.isReminderOn = true;
|
||||
taskBody.reminderDateTime = { dateTime: reminder_date_time, timeZone: 'UTC' };
|
||||
}
|
||||
|
||||
if (start_date_time) {
|
||||
taskBody.startDateTime = { dateTime: start_date_time, timeZone: 'UTC' };
|
||||
}
|
||||
|
||||
if (categories && categories !== '') {
|
||||
taskBody.categories = categories
|
||||
.split(',')
|
||||
.map((c) => c.trim())
|
||||
.filter((c) => c.length > 0);
|
||||
}
|
||||
|
||||
// Only send request if there's something to update
|
||||
if (Object.keys(taskBody).length === 0) {
|
||||
// Optionally return the existing task or a message, or fetch and return task if ID is present
|
||||
// For now, just return a message or do nothing if nothing to update.
|
||||
// However, a PATCH with empty body might be treated as bad request by some APIs.
|
||||
// Microsoft Graph usually ignores fields not present, so an empty body PATCH might be a no-op.
|
||||
// Best to ensure at least one field is being modified or return early.
|
||||
// Let's assume for now the user intends a no-op if all update fields are blank,
|
||||
// but this might need a more specific behavior (e.g. fetch current task data).
|
||||
// For safety, if requestBody is empty, we could fetch the task and return it.
|
||||
// For now, let's proceed with the PATCH, it should be a no-op by MS Graph if body is empty.
|
||||
throw new Error('Please provide any field to update.');
|
||||
}
|
||||
|
||||
const response = await client
|
||||
.api(`/me/todo/lists/${task_list_id}/tasks/${task_id}`)
|
||||
.update(taskBody);
|
||||
|
||||
return response;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,156 @@
|
||||
import { OAuth2PropertyValue, DropdownOption } from '@activepieces/pieces-framework';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import { TodoTaskList, TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
export async function getTaskListsDropdown(auth: OAuth2PropertyValue): Promise<{
|
||||
disabled: boolean;
|
||||
options: DropdownOption<string>[];
|
||||
placeholder?: string;
|
||||
}> {
|
||||
if (!auth || !auth.access_token) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'Connect your account first',
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const options: DropdownOption<string>[] = [];
|
||||
let response: PageCollection = await client.api(`/me/todo/lists`).get();
|
||||
|
||||
while (response.value.length > 0) {
|
||||
for (const list of response.value as TodoTaskList[]) {
|
||||
options.push({ label: list.displayName!, value: list.id! });
|
||||
}
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
disabled: false,
|
||||
options: options,
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'An unexpected error occurred while fetching task lists.',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export async function getTasksInListDropdown(
|
||||
auth: OAuth2PropertyValue,
|
||||
taskListId: string,
|
||||
): Promise<{
|
||||
disabled: boolean;
|
||||
options: DropdownOption<string>[];
|
||||
placeholder?: string;
|
||||
}> {
|
||||
if (!auth || !auth.access_token) {
|
||||
return { disabled: true, options: [], placeholder: 'Connect your account first' };
|
||||
}
|
||||
if (!taskListId) {
|
||||
return { disabled: true, options: [], placeholder: 'Task List ID is required' };
|
||||
}
|
||||
|
||||
try {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const options: DropdownOption<string>[] = [];
|
||||
|
||||
let response: PageCollection = await client.api(`/me/todo/lists/${taskListId}/tasks`).get();
|
||||
while (response.value.length > 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
if (task.id && task.title) {
|
||||
options.push({ label: task.title, value: task.id });
|
||||
}
|
||||
}
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return { disabled: false, options: options };
|
||||
} catch (error) {
|
||||
return { disabled: true, options: [], placeholder: 'Error fetching tasks.' };
|
||||
}
|
||||
}
|
||||
|
||||
export async function getIncompleteTasksInListDropdown(
|
||||
auth: OAuth2PropertyValue,
|
||||
taskListId: string,
|
||||
): Promise<{
|
||||
disabled: boolean;
|
||||
options: DropdownOption<string>[];
|
||||
placeholder?: string;
|
||||
}> {
|
||||
if (!auth || !auth.access_token) {
|
||||
return { disabled: true, options: [], placeholder: 'Connect your account first' };
|
||||
}
|
||||
if (!taskListId) {
|
||||
return { disabled: true, options: [], placeholder: 'Task List ID is required' };
|
||||
}
|
||||
|
||||
try {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const options: DropdownOption<string>[] = [];
|
||||
|
||||
let response: PageCollection = await client
|
||||
.api(`/me/todo/lists/${taskListId}/tasks`)
|
||||
.filter("status ne 'completed'")
|
||||
.get();
|
||||
|
||||
while (response.value.length > 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
if (task.id && task.title) {
|
||||
options.push({ label: task.title, value: task.id });
|
||||
}
|
||||
}
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (options.length === 0) {
|
||||
return {
|
||||
disabled: true,
|
||||
options: [],
|
||||
placeholder: 'No incomplete tasks found in this list',
|
||||
};
|
||||
}
|
||||
|
||||
return { disabled: false, options: options };
|
||||
} catch (error) {
|
||||
return { disabled: true, options: [], placeholder: 'Error fetching tasks.' };
|
||||
}
|
||||
}
|
||||
|
||||
export const microsoftTodoCommon = {
|
||||
getTaskListsDropdown,
|
||||
getTasksInListDropdown,
|
||||
getIncompleteTasksInListDropdown,
|
||||
};
|
||||
@@ -0,0 +1,69 @@
|
||||
import { TriggerStrategy, createTrigger, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
|
||||
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import { TodoTaskList } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof microsoftToDoAuth>, Record<string, never>> = {
|
||||
strategy: DedupeStrategy.LAST_ITEM,
|
||||
items: async ({ auth }) => {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response = await client.api('/me/todo/lists').get();
|
||||
const lists = response.value as TodoTaskList[];
|
||||
|
||||
return lists.map((list) => ({
|
||||
id: list.id!,
|
||||
data: list,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newListCreatedTrigger = createTrigger({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'new_list_created',
|
||||
displayName: 'New List',
|
||||
description: 'Triggers when a new task list is created.',
|
||||
props: {},
|
||||
type: TriggerStrategy.POLLING,
|
||||
sampleData: {
|
||||
'@odata.etag': 'W/"m19slk90924jJPD1941jla="',
|
||||
'displayName': 'Vacation Plans',
|
||||
'isOwner': true,
|
||||
'isShared': false,
|
||||
'wellknownListName': 'none',
|
||||
'id': 'AAMkAGI2NGY3NTY0LTZmYjEtNDk0MS04YjQ5LTFlNmQ5NjI1MWI5ZgAuAAAAAAC50Fk_sKMfS5_62i1Isws2AQD3xL9-24sxT5RO4265g_AEAAB3x24kAAA=',
|
||||
},
|
||||
|
||||
async onEnable(context) {
|
||||
await pollingHelper.poll(polling, context as any);
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
await pollingHelper.onDisable(polling, context as any);
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
return await pollingHelper.poll(polling, context as any);
|
||||
},
|
||||
|
||||
async test(context) {
|
||||
try {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(context.auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const response = await client.api('/me/todo/lists').get();
|
||||
const lists = (response.value as TodoTaskList[]).slice(0, 5);
|
||||
return lists;
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to fetch task lists: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,112 @@
|
||||
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
|
||||
import { getTaskListsDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import dayjs from 'dayjs';
|
||||
import { TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof microsoftToDoAuth>, { task_list_id: string }> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
items: async ({ auth, propsValue, store, lastFetchEpochMS }) => {
|
||||
const taskListId = propsValue.task_list_id;
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const tasks = [];
|
||||
|
||||
const filter =
|
||||
lastFetchEpochMS === 0
|
||||
? '$top=10'
|
||||
: `$filter=createdDateTime gt ${dayjs(lastFetchEpochMS).toISOString()}`;
|
||||
|
||||
let response: PageCollection = await client
|
||||
.api(`/me/todo/lists/${taskListId}/tasks?${filter}`)
|
||||
.get();
|
||||
|
||||
if (lastFetchEpochMS === 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
tasks.push(task);
|
||||
}
|
||||
} else {
|
||||
while (response.value.length > 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
tasks.push(task);
|
||||
}
|
||||
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tasks.map((task) => ({
|
||||
epochMilliSeconds: dayjs(task.createdDateTime).valueOf(),
|
||||
data: task,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newTaskCreatedTrigger = createTrigger({
|
||||
name: 'new_task_created',
|
||||
displayName: 'New Task',
|
||||
description: 'Triggers when a new task is created.',
|
||||
auth: microsoftToDoAuth,
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return { disabled: true, placeholder: 'Connect your account first', options: [] };
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
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: {
|
||||
'@odata.etag': 'W/"vVwdQvxCiE6779iYhchMrAAGgwrb4w=="',
|
||||
importance: 'normal',
|
||||
isReminderOn: false,
|
||||
status: 'notStarted',
|
||||
title: 'fdfdfd',
|
||||
createdDateTime: '2025-05-08T12:40:55.3080693Z',
|
||||
lastModifiedDateTime: '2025-05-08T12:40:55.3533435Z',
|
||||
hasAttachments: false,
|
||||
categories: [],
|
||||
id: 'AQMkADAwATM3ZmYAZS0xNGVmLWNiZmYALTAwAi0wMAoARgAAAw8tTPoZEYtLvE5mK48wuvIHAL1cHUL8QohOu_-YmIXITKwABoMc5_AAAAC9XB1C-EKITrvv2JiFyEysAAaDHTv2AAAA',
|
||||
body: {
|
||||
content: '',
|
||||
contentType: 'text',
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,138 @@
|
||||
import { OAuth2PropertyValue, Property, TriggerStrategy, createTrigger } from '@activepieces/pieces-framework';
|
||||
import { getTaskListsDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client } from '@microsoft/microsoft-graph-client';
|
||||
import dayjs from 'dayjs';
|
||||
import { TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
|
||||
interface WebhookNotification {
|
||||
value: {
|
||||
resource: string;
|
||||
resourceData?: {
|
||||
id: string;
|
||||
};
|
||||
}[];
|
||||
}
|
||||
|
||||
export const taskCompletedTrigger = createTrigger({
|
||||
auth: microsoftToDoAuth,
|
||||
name: 'task_completed',
|
||||
displayName: 'Task Completed',
|
||||
description: 'Triggers when a task is completed in a specific list.',
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
description: 'The list to watch for completed tasks.',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
const authValue = auth as OAuth2PropertyValue;
|
||||
if (!authValue?.access_token) {
|
||||
return { disabled: true, placeholder: 'Connect your account first', options: [] };
|
||||
}
|
||||
return await getTaskListsDropdown(authValue);
|
||||
},
|
||||
}),
|
||||
},
|
||||
type: TriggerStrategy.WEBHOOK,
|
||||
sampleData: {
|
||||
'@odata.etag': 'W/"vVwdQvxCiE6779iYhchMrAAGgwrltg=="',
|
||||
importance: 'normal',
|
||||
isReminderOn: false,
|
||||
status: 'completed',
|
||||
title: 'Test Task',
|
||||
},
|
||||
|
||||
async onEnable(context) {
|
||||
try {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: { getAccessToken: () => Promise.resolve(context.auth.access_token) },
|
||||
});
|
||||
|
||||
const clientState = Math.random().toString(36).substring(7);
|
||||
const expirationDateTime = dayjs().add(2, 'days').toISOString();
|
||||
|
||||
const response = await client.api('/subscriptions').post({
|
||||
changeType: 'updated',
|
||||
notificationUrl: context.webhookUrl,
|
||||
resource: `/me/todo/lists/${context.propsValue.task_list_id}/tasks`,
|
||||
expirationDateTime: expirationDateTime,
|
||||
clientState: clientState,
|
||||
});
|
||||
|
||||
await context.store.put('subscriptionId', response.id);
|
||||
await context.store.put('clientState', clientState);
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to create webhook subscription: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
|
||||
async onDisable(context) {
|
||||
try {
|
||||
const subscriptionId = await context.store.get('subscriptionId') as string | null;
|
||||
if (subscriptionId) {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: { getAccessToken: () => Promise.resolve(context.auth.access_token) },
|
||||
});
|
||||
await client.api(`/subscriptions/${subscriptionId}`).delete();
|
||||
await context.store.delete('subscriptionId');
|
||||
await context.store.delete('clientState');
|
||||
}
|
||||
} catch (error: any) {
|
||||
console.warn(`Failed to delete subscription: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
|
||||
async onRenew(context) {
|
||||
try {
|
||||
const subscriptionId = await context.store.get('subscriptionId') as string | null;
|
||||
if (subscriptionId) {
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: { getAccessToken: () => Promise.resolve(context.auth.access_token) },
|
||||
});
|
||||
await client.api(`/subscriptions/${subscriptionId}`).patch({
|
||||
expirationDateTime: dayjs().add(2, 'days').toISOString(),
|
||||
});
|
||||
}
|
||||
} catch (error: any) {
|
||||
throw new Error(`Failed to renew subscription: ${error?.message || error}`);
|
||||
}
|
||||
},
|
||||
|
||||
async run(context) {
|
||||
const payload = context.payload.body as WebhookNotification;
|
||||
|
||||
const storedClientState = await context.store.get('clientState') as string | null;
|
||||
const receivedClientState = (context.payload.body as any)?.value?.[0]?.clientState;
|
||||
|
||||
if (storedClientState && receivedClientState !== storedClientState) {
|
||||
console.warn('Invalid clientState received in webhook notification');
|
||||
return [];
|
||||
}
|
||||
|
||||
const completedTasks: TodoTask[] = [];
|
||||
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: { getAccessToken: () => Promise.resolve(context.auth.access_token) },
|
||||
});
|
||||
|
||||
for (const notification of payload.value) {
|
||||
const taskId = notification.resourceData?.id;
|
||||
if (!taskId) continue;
|
||||
|
||||
try {
|
||||
const task = await client.api(notification.resource).get() as TodoTask;
|
||||
|
||||
if (task.status === 'completed') {
|
||||
completedTasks.push(task);
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(`Failed to fetch task ${taskId}, it may have been deleted.`);
|
||||
}
|
||||
}
|
||||
|
||||
return completedTasks;
|
||||
},
|
||||
});
|
||||
@@ -0,0 +1,112 @@
|
||||
import { AppConnectionValueForAuthProperty, OAuth2PropertyValue, Property } from '@activepieces/pieces-framework';
|
||||
import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
|
||||
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
|
||||
import { getTaskListsDropdown } from '../common';
|
||||
import { microsoftToDoAuth } from '../../index';
|
||||
import { Client, PageCollection } from '@microsoft/microsoft-graph-client';
|
||||
import dayjs from 'dayjs';
|
||||
import { TodoTask } from '@microsoft/microsoft-graph-types';
|
||||
|
||||
const polling: Polling<AppConnectionValueForAuthProperty<typeof microsoftToDoAuth>, { task_list_id: string }> = {
|
||||
strategy: DedupeStrategy.TIMEBASED,
|
||||
async items({ auth, propsValue, store, lastFetchEpochMS }) {
|
||||
const taskListId = propsValue.task_list_id;
|
||||
const client = Client.initWithMiddleware({
|
||||
authProvider: {
|
||||
getAccessToken: () => Promise.resolve(auth.access_token),
|
||||
},
|
||||
});
|
||||
|
||||
const tasks = [];
|
||||
|
||||
const filter =
|
||||
lastFetchEpochMS === 0
|
||||
? '$top=10'
|
||||
: `$filter=lastModifiedDateTime gt ${dayjs(lastFetchEpochMS).toISOString()}`;
|
||||
|
||||
let response: PageCollection = await client
|
||||
.api(`/me/todo/lists/${taskListId}/tasks?${filter}`)
|
||||
.get();
|
||||
|
||||
if (lastFetchEpochMS === 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
tasks.push(task);
|
||||
}
|
||||
} else {
|
||||
while (response.value.length > 0) {
|
||||
for (const task of response.value as TodoTask[]) {
|
||||
tasks.push(task);
|
||||
}
|
||||
|
||||
if (response['@odata.nextLink']) {
|
||||
response = await client.api(response['@odata.nextLink']).get();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return tasks.map((task) => ({
|
||||
epochMilliSeconds: dayjs(task.lastModifiedDateTime).valueOf(),
|
||||
data: task,
|
||||
}));
|
||||
},
|
||||
};
|
||||
|
||||
export const newOrUpdatedTaskTrigger = createTrigger({
|
||||
name: 'new_or_updated_task',
|
||||
displayName: 'New or Updated Task',
|
||||
description: 'Triggers when a new task is created or an existing task is updated.',
|
||||
auth: microsoftToDoAuth,
|
||||
props: {
|
||||
task_list_id: Property.Dropdown({
|
||||
auth: microsoftToDoAuth,
|
||||
displayName: 'Task List',
|
||||
required: true,
|
||||
refreshers: [],
|
||||
options: async ({ auth }) => {
|
||||
if (!(auth as OAuth2PropertyValue)?.access_token) {
|
||||
return { disabled: true, placeholder: 'Connect your account first', options: [] };
|
||||
}
|
||||
return await getTaskListsDropdown(auth as OAuth2PropertyValue);
|
||||
},
|
||||
}),
|
||||
},
|
||||
type: TriggerStrategy.POLLING,
|
||||
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: {
|
||||
'@odata.etag': 'W/"vVwdQvxCiE6779iYhchMrAAGgwrb4w=="',
|
||||
importance: 'normal',
|
||||
isReminderOn: false,
|
||||
status: 'notStarted',
|
||||
title: 'fdfdfd',
|
||||
createdDateTime: '2025-05-08T12:40:55.3080693Z',
|
||||
lastModifiedDateTime: '2025-05-08T12:40:55.3533435Z',
|
||||
hasAttachments: false,
|
||||
categories: [],
|
||||
id: 'AQMkADAwATM3ZmYAZS0xNGVmLWNiZmYALTAwAi0wMAoARgAAAw8tTPoZEYtLvE5mK48wuvIHAL1cHUL8QohOu_-YmIXITKwABoMc5_AAAAC9XB1C-EKITrvv2JiFyEysAAaDHTv2AAAA',
|
||||
body: {
|
||||
content: '',
|
||||
contentType: 'text',
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user