/** * Microsoft To Do por Microsoft Graph — la fuente única de sus operaciones * para el api, hw-nodes, el dashboard y el servidor MCP. * * ## Por qué un nodo aparte (2026-10-12) * * Ariel: «quiero hacer la integración ahora de Microsoft To Do… el Action, el * AI Toolkit… si se puede por triggers». Como los otros seis de Microsoft 365, * con su propia app de Entra («HostWebhook To Do») y su credencial: Microsoft * sólo deja revocar la app ENTERA, así que quitarle las tareas a HostWebhook * no le quita el correo, ni al revés. * * ## Dieciocho operaciones en cuatro familias (lo que eligió: «Completo») * * - **Tasks** — crear (con notas, fecha, recordatorio, importancia, * categorías y un enlace de vuelta), leer una, listar, cambiar, completar, * reabrir y borrar. * - **Lists** — listarlas, crear, renombrar y borrar. * - **Steps** — los pasos (la checklist) de una tarea: añadir, listar, * marcar o desmarcar, y borrar. * - **Attachments** — adjuntar un fichero del flujo (menos de 3 MB, el * tope de Graph sin sesión de subida), listarlos y bajar uno a un fichero * de HostWebhook. * * ## La lista * * En Graph una tarea vive SIEMPRE dentro de una lista: no hay ruta a una tarea * sin su lista. Por eso casi toda operación lleva `listId`, que se elige de un * selector con las listas de la cuenta (`todoList`). Vacío = la lista por * defecto de la cuenta («Tasks», `wellknownListName: defaultList`). El trigger * entrega `listId` con cada tarea, así que `{{payload.listId}}` encadena. * * ## Las fechas * * La fecha de vencimiento es una FECHA (To Do no guarda hora): se manda a * medianoche en la zona del nodo y se lee como fecha. El recordatorio sí es un * instante. Ver hw-nodes. * * ## Personal y trabajo * * `Tasks.ReadWrite` vale para las dos y no pide consentimiento de * administrador. Todo lo de aquí existe en Graph v1.0 para cuentas personales. */ export declare const MICROSOFT_TODO_OPERATIONS: readonly ["createTask", "getTask", "listTasks", "updateTask", "completeTask", "reopenTask", "deleteTask", "listLists", "createList", "renameList", "deleteList", "addStep", "listSteps", "checkStep", "deleteStep", "addAttachment", "listAttachments", "downloadAttachment"]; export type MicrosoftTodoOperation = (typeof MICROSOFT_TODO_OPERATIONS)[number]; /** Type guard — for DTOs and AI tool calls, where the input is untrusted. */ export declare function isMicrosoftTodoOperation(value: unknown): value is MicrosoftTodoOperation; /** Los grupos del desplegable, en su orden. */ export declare const MICROSOFT_TODO_OPERATION_GROUPS: ReadonlyArray<{ label: string; operations: ReadonlyArray; }>; /** * El tipo de credencial: el OAuth de la app «HostWebhook To Do» de Entra. Un * tipo por servicio de Microsoft, porque cada uno es su propia app. */ export declare const MICROSOFT_TODO_CREDENTIAL_TYPE = "microsoft_todo_oauth2"; /** * Las que devuelven una COLECCIÓN sobre la que el nodo de abajo repite, con el * campo que se itera. */ export declare const MICROSOFT_TODO_ITERABLE_OPERATIONS: Readonly>>; /** * Las que BORRAN. Lo borrado en To Do no vuelve por la API. En el toolkit * nacen bloqueadas (lo que eligió Ariel: «las que borran»); single operation * las corre como las demás. */ export declare const MICROSOFT_TODO_OPERACIONES_SENSIBLES: ReadonlyArray; /** `importance` de una tarea. */ export declare const MICROSOFT_TODO_IMPORTANCIAS: readonly ["low", "normal", "high"]; /** * `status` de una tarea. La app de To Do sólo enseña «hecha» o no; los otros * tres existen en Graph (vienen de las tareas de Outlook) y se respetan. */ export declare const MICROSOFT_TODO_ESTADOS: readonly ["notStarted", "inProgress", "completed", "waitingOnOthers", "deferred"]; /** Qué tareas lista «List tasks». */ export declare const MICROSOFT_TODO_FILTROS_DE_ESTADO: readonly ["open", "completed", "all"]; /** «List tasks»: lo más que se puede pedir, y lo que se pide si no se dice. */ export declare const MICROSOFT_TODO_LISTADO_MAXIMO = 200; export declare const MICROSOFT_TODO_LISTADO_POR_DEFECTO = 50; /** * Un adjunto se sube en UNA petición (`POST …/attachments`), que Graph admite * por debajo de 3 MB. Más grande pide una sesión de subida; no hace falta para * lo que se adjunta a una tarea. */ export declare const MICROSOFT_TODO_ADJUNTO_MAX_BYTES: number; /** Lo más largo de un título (lo que acepta To Do). */ export declare const MICROSOFT_TODO_TITULO_MAXIMO = 255; export interface MicrosoftTodoParamSpec { /** Field key — also the property name on operationConfig. */ name: string; label: string; /** * Param type, so the dashboard renders the right control. `todoList` es el * selector de listas de la cuenta (con «escribir a mano» para plantillas); * `date`, un día; `datetime`, día y hora; `timezone`, el selector de zonas. */ type: 'text' | 'string' | 'number' | 'boolean' | 'select' | 'date' | 'datetime' | 'timezone' | 'todoList'; required?: boolean; description: string; placeholder?: string; /** For `select`. */ options?: readonly string[]; /** For `number`. */ min?: number; max?: number; } export interface MicrosoftTodoOperationSpec { label: string; description: string; /** The Graph route this maps to, so the mapping is checkable. */ apiRoute: string; /** Changes something in To Do (as opposed to only reading it). */ writes?: boolean; params: MicrosoftTodoParamSpec[]; } export declare const MICROSOFT_TODO_OPERATION_SPECS: Record;