/** * Outlook (correo) 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-09-30) * * Ariel pidió las integraciones de Microsoft 365 SEPARADAS, un nodo por * producto —Outlook, Calendario, OneDrive, Excel, Word y Teams—, cada uno con * su action, su trigger y su AI toolkit. Y una app de Entra por servicio, * como los clientes de Google: Microsoft sólo deja revocar la app ENTERA, así * que quitarle Outlook a HostWebhook no tiene que quitarle OneDrive. * * ## Diecisiete operaciones, a la par que Gmail * * - **Enviar** — enviar, borrador, enviar un borrador, responder (o a todos) * y reenviar. * - **Leer** — un correo, buscar correos y una conversación entera. * - **Ordenar** — mover, leído / no leído, bandera, categorías y borrar. * - **Carpetas** — listarlas y crear una. En Outlook las carpetas hacen lo * que en Gmail hacen las etiquetas, y las categorías lo que hacen las * etiquetas de color. * * ## Cada ruta existe en Graph v1.0 * * Sacadas de la referencia de Microsoft Graph (learn.microsoft.com/graph), no * de memoria, y todas funcionan con cuentas personales (Outlook.com, Hotmail) * y de trabajo con los permisos `Mail.ReadWrite` y `Mail.Send`. * * ## La v2 (2026-09-30, noche): tres más, veinte en total * * - **Send and wait for response** — el de Gmail: botones Approve / * Disapprove al pie y el flujo parado hasta el clic. No es herramienta. * - **Download attachments** — los adjuntos de un correo, guardados como * ficheros de HostWebhook (`attachments[]._file`) para el nodo siguiente. * - **List categories** — las categorías maestras del buzón. Pide * `MailboxSettings.Read`: sólo LEER, porque crear categorías maestras * pediría `MailboxSettings.ReadWrite`, que también cambia las respuestas * automáticas. Una credencial conectada antes no lo tiene (Reconnect). * * Y los adjuntos al enviar pasan de 3 MB a 25 MB: por encima de 3 MB suben por * la sesión de subida de Graph (borrador, trozos y enviar). */ export declare const OUTLOOK_OPERATIONS: readonly ["sendEmail", "sendAndWaitForResponse", "createDraft", "sendDraft", "replyToEmail", "forwardEmail", "getEmail", "downloadAttachments", "findEmails", "getConversation", "moveEmail", "markAsRead", "markAsUnread", "flagEmail", "addCategory", "removeCategory", "listCategories", "deleteEmail", "listFolders", "createFolder"]; export type OutlookOperation = (typeof OUTLOOK_OPERATIONS)[number]; /** Type guard — for DTOs and AI tool calls, where the input is untrusted. */ export declare function isOutlookOperation(value: unknown): value is OutlookOperation; /** * El tipo de credencial: el OAuth de la app «HostWebhook Outlook» de Entra. * Un tipo por servicio de Microsoft, porque cada uno es su propia app. */ export declare const OUTLOOK_CREDENTIAL_TYPE = "microsoft_outlook_oauth2"; /** * Las carpetas con nombre bien conocido (`wellKnownFolderName` de Graph). Se * aceptan donde va una carpeta; cualquier otra se nombra por su ID, que da * «List folders». */ export declare const OUTLOOK_CARPETAS_CONOCIDAS: readonly ["inbox", "drafts", "sentitems", "deleteditems", "archive", "junkemail"]; /** `importance` de un mensaje. */ export declare const OUTLOOK_IMPORTANCIAS: readonly ["low", "normal", "high"]; /** `flag.flagStatus` de un mensaje. */ export declare const OUTLOOK_ESTADOS_DE_BANDERA: readonly ["flagged", "complete", "notFlagged"]; /** Cómo llega el cuerpo: HTML o texto plano (`Prefer: outlook.body-content-type`). */ export declare const OUTLOOK_FORMATOS_DE_CUERPO: readonly ["text", "html"]; /** Tope de un listado: lo que se le pide a Graph en una página. */ export declare const OUTLOOK_LISTADO_MAXIMO = 50; /** Lo que se pide si no se dice. */ export declare const OUTLOOK_LISTADO_POR_DEFECTO = 10; /** * Hasta dónde van los adjuntos DENTRO de la petición. Graph rechaza una * petición de más de 4 MB, y el base64 engorda un tercio: 3 MB de ficheros ya * son 4. Por encima, el correo se arma como borrador y cada adjunto grande sube * por la sesión de subida de Graph (`createUploadSession`), en trozos. */ export declare const OUTLOOK_ADJUNTOS_MAX_BYTES: number; /** * Tope de los adjuntos de un correo, contando todos. El de Gmail: Exchange * Online y Outlook.com rechazan mensajes bastante más grandes, y un correo con * más de esto es un enlace a OneDrive, no un adjunto. */ export declare const OUTLOOK_ADJUNTOS_TOTAL_MAX_BYTES: number; /** «Download attachments»: tope por adjunto. Uno más grande sale en `skipped`. */ export declare const OUTLOOK_DESCARGA_MAX_BYTES_POR_ADJUNTO: number; /** «Download attachments»: tope de lo que se guarda en una llamada. */ export declare const OUTLOOK_DESCARGA_MAX_BYTES_TOTAL: number; /** «Download attachments»: cuántos adjuntos como mucho. */ export declare const OUTLOOK_DESCARGA_MAX_ADJUNTOS = 20; /** «Send and wait»: lo que espera si no se dice — 24 h, como Gmail. */ export declare const OUTLOOK_ESPERA_POR_DEFECTO_MIN = 1440; export interface OutlookParamSpec { /** Field key — also the property name on operationConfig. */ name: string; label: string; /** Param type, so the dashboard renders the right control. */ type: 'text' | 'string' | 'number' | 'boolean' | 'select' | 'json'; required?: boolean; description: string; placeholder?: string; /** For `select`. */ options?: readonly string[]; /** For `number`. */ min?: number; max?: number; } export interface OutlookOperationSpec { label: string; description: string; /** The Graph route this maps to, so the mapping is checkable. */ apiRoute: string; /** Changes something in the mailbox (as opposed to only reading it). */ writes?: boolean; params: OutlookParamSpec[]; } export declare const OUTLOOK_OPERATION_SPECS: Record;