/** * SharePoint 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: «haz lo del SharePoint… action, si se puede trigger, toolkit, MCP». * Como los otros siete de Microsoft 365, con su propia app de Entra * («HostWebhook SharePoint») y su credencial: Microsoft sólo deja revocar la * app ENTERA, así que quitarle los sitios a HostWebhook no le quita el correo. * * ## Veinte operaciones en tres familias (lo que eligió: «Completo») * * - **Sites** — buscar los sitios a los que la cuenta tiene acceso y leer * uno (por su ID o por su URL). * - **Lists** — las listas de un sitio como una base de datos: listarlas, * crear una, ver sus columnas, y leer, crear, cambiar y borrar elementos. * - **Libraries** — las bibliotecas de documentos: ver una carpeta, buscar, * leer un fichero, subir uno del flujo, bajarlo a un fichero de * HostWebhook, crear carpetas, mover, borrar y crear un enlace para * compartir. Por dentro una biblioteca es una unidad de OneDrive * (`/drives/{id}`), así que el nodo usa las mismas ayudas que OneDrive. * * ## El sitio * * Todo vive en un sitio: casi toda operación lleva `siteId`, que se elige de * un selector con los sitios de la cuenta (`sharepointSite`). Se acepta * también la URL del sitio (`https://contoso.sharepoint.com/sites/ventas`). * La lista (`sharepointList`) y la biblioteca (`sharepointLibrary`) se eligen * de las del sitio; la biblioteca vacía es la de por defecto del sitio * («Documents»). * * ## Sólo cuentas de trabajo o escuela * * SharePoint no existe en las cuentas personales de Microsoft. La app pide * `Sites.ReadWrite.All`, que necesita el consentimiento del administrador de * la organización la primera vez. */ export declare const SHAREPOINT_OPERATIONS: readonly ["searchSites", "getSite", "listLists", "createList", "listColumns", "listItems", "getItem", "createItem", "updateItem", "deleteItem", "listLibraries", "listFolder", "searchFiles", "getFile", "uploadFile", "downloadFile", "createFolder", "moveFile", "deleteFile", "createShareLink"]; export type SharepointOperation = (typeof SHAREPOINT_OPERATIONS)[number]; /** Type guard — for DTOs and AI tool calls, where the input is untrusted. */ export declare function isSharepointOperation(value: unknown): value is SharepointOperation; /** Los grupos del desplegable, en su orden. */ export declare const SHAREPOINT_OPERATION_GROUPS: ReadonlyArray<{ label: string; operations: ReadonlyArray; }>; /** * El tipo de credencial: el OAuth de la app «HostWebhook SharePoint» de Entra. * Un tipo por servicio de Microsoft, porque cada uno es su propia app. */ export declare const SHAREPOINT_CREDENTIAL_TYPE = "microsoft_sharepoint_oauth2"; /** * Las que devuelven una COLECCIÓN sobre la que el nodo de abajo repite, con el * campo que se itera. */ export declare const SHAREPOINT_ITERABLE_OPERATIONS: Readonly>>; /** * Las que BORRAN. Un elemento o un fichero borrado va a la papelera del sitio * (93 días), pero un flujo o un modelo no lo saca de ahí. En el toolkit nacen * bloqueadas (lo que eligió Ariel); single operation las corre como las demás. */ export declare const SHAREPOINT_OPERACIONES_SENSIBLES: ReadonlyArray; /** Qué pasa si el nombre ya existe al subir o al crear una carpeta. */ export declare const SHAREPOINT_CONFLICTOS: readonly ["fail", "rename", "replace"]; /** El enlace para compartir: qué deja hacer, y a quién. */ export declare const SHAREPOINT_TIPOS_DE_ENLACE: readonly ["view", "edit"]; export declare const SHAREPOINT_ALCANCES_DE_ENLACE: readonly ["organization", "anonymous"]; /** Los listados: lo más que se puede pedir, y lo que se pide si no se dice. */ export declare const SHAREPOINT_LISTADO_MAXIMO = 200; export declare const SHAREPOINT_LISTADO_POR_DEFECTO = 50; /** Lo más largo del nombre de una lista o de una columna (lo que acepta SharePoint). */ export declare const SHAREPOINT_NOMBRE_MAXIMO = 255; export interface SharepointParamSpec { /** Field key — also the property name on operationConfig. */ name: string; label: string; /** * Param type, so the dashboard renders the right control. * `sharepointSite`, `sharepointList`, `sharepointLibrary` y * `sharepointFolder` son selectores (con «escribir a mano» para * plantillas); `fields`, los campos de un elemento (clave: valor). */ type: 'text' | 'string' | 'number' | 'boolean' | 'select' | 'fields' | 'sharepointSite' | 'sharepointList' | 'sharepointLibrary' | 'sharepointFolder'; required?: boolean; description: string; placeholder?: string; /** For `select`. */ options?: readonly string[]; /** For `number`. */ min?: number; max?: number; } export interface SharepointOperationSpec { label: string; description: string; /** The Graph route this maps to, so the mapping is checkable. */ apiRoute: string; /** Changes something in SharePoint (as opposed to only reading it). */ writes?: boolean; params: SharepointParamSpec[]; } export declare const SHAREPOINT_OPERATION_SPECS: Record;