Manifest
Manifest de una extension (manifest.json). Se construye con defineManifest y se valida con _shared/validate.mjs.
Firma
export interface Manifest {
// 34 miembros: ver la tabla
}Notas
Un manifest declara permisos, funciones de servidor (api), UI (mounts, overlays), hooks (intercepts) y metadatos
para la pagina /extensions. Los servicios del host (ctx.services.*) solo existen si el permiso correspondiente esta declarado.
Miembros (34)
| Nombre | Tipo | Descripción |
|---|---|---|
| manifestVersionopcional | ManifestVersion | Version del formato del manifest. |
| idobligatorio | string | [A-Za-z0-9._:-], max 100. |
| nameobligatorio | string | Nombre visible. |
| versionobligatorio | string | semver: 1.0.0 |
| descriptionopcional | string | Descripcion corta para /extensions. |
| statusopcional | "active" | "disabled" |
|
| clientOnlyopcional | boolean | Sin server.js: solo UI (CALL_API / acciones de cliente). |
| permissionsopcional | Permission[] | Permisos que pide; sin ellos los servicios del host fallan con |
| requiresopcional | { clientApi?: number | string; capabilities?: ClientCapability[]; extensions?: Record<string, string>; } | Version del cliente y capacidades que necesita. Sin |
| authopcional | ManifestAuth | Autenticacion frente a un proveedor externo. |
| apiopcional | ManifestApi | Script de servidor y funciones invocables. |
| mountsopcional | ManifestMount[] | UI que se monta en la aplicacion. |
| overlaysopcional | Record<string, UiNode> | id -> componente raiz (normalmente MODAL). Se abren con OPEN_OVERLAY. |
| interceptsopcional | ManifestIntercept[] | Hooks de servidor (eventos, antes de enviar, cron). |
| hooksopcional | ManifestIntercept[] | Alias de |
| slashCommandsopcional | ManifestSlashCommand[] | Comandos |
| backendRoutesopcional | ManifestBackendRoute[] | Rutas HTTP propias. |
| navEntriesopcional | ManifestNavEntry[] | Entradas de navegacion hacia paginas de esta extension (barra lateral del correo o consola de admin). Exige |
| oauthProvidersopcional | ManifestOAuthProvider[] | Proveedores OAuth2/OIDC que registra esta extension (el nucleo ejecuta el flujo; los tokens nunca llegan a extensiones). Exige |
| categoryopcional | string | Categoria de la pagina /extensions (id o alias es/en: mail, composer, calendar, contacts, automation, ai, integrations, settings, other). |
| tagsopcional | string[] | Etiquetas de busqueda: max 12, hasta 30 caracteres, sin HTML. |
| publisheropcional | { id: string; name: string; icon?: string; url?: string; verified?: boolean; official?: boolean; } | Marketplace: editor de la extension. Sin |
| suiteopcional | { id: string; name: string; icon?: string; } | Marketplace: suite/marca que agrupa productos relacionados (carpeta del marketplace). |
| categoriesopcional | Array<'mail' | 'composer' | 'calendar' | 'contacts' | 'automation' | 'ai' | 'integrations' | 'settings' | 'other'> | Marketplace: 1-3 categorias (ids de category); la primera es la principal. |
| screenshotsopcional | string[] | Capturas: URLs absolutas https (max 6). |
| changelogopcional | Array<{ version: string; date?: string; notes?: string | string[]; }> | Historial de versiones (max 20 entradas); notes se muestra como texto plano. |
| mandatoryopcional | boolean | true = OBLIGATORIA para todos los usuarios del dominio (DLP, seguridad): no se puede desactivar y sus hooks de servidor se ejecutan siempre. |
| iconopcional | string | Icono: "brand:<slug>" (logotipo de una app integrada), "lucide:<Nombre>", "initials:<XY>" o un nombre Lucide. Sin URLs de imagen. |
| i18nopcional | Record<string, { name?: string; description?: string; }> | Nombre y descripcion por idioma: { es: { name, description }, en: { ... } }. name/description son el respaldo. |
| kindopcional | string | Tipo de extension ("conferencing-provider" | "calendar-provider"). |
| conferencingProvidersopcional | Array<{ id: string; name: string; icon?: string; handlers: { createMeeting: string; status?: string; testConnection?: string; updateMeeting?: string; deleteMeeting?: string; }; }> | Proveedores de videollamada que registra la extension (ver _shared/CONFERENCING-CONTRACT.md). |
| settingsSchemaopcional | SettingsSchema | Ajustes TIPADOS configurables por dominio desde el panel Ajustes del admin (ver _shared/settings-schema.ts). Los no secretos llegan al handler en ctx.settings; los secretos (secret: true) se editan como credenciales cifradas. |
| aiopcional | ManifestAi | Uso de IA de la instancia (services.ai). Requiere el permiso AI_GENERATE. Si la IA esta desactivada la extension se bloquea, salvo |
| [extra: string] | unknown | Otras claves informativas (authModes, extensionPoints...) las ignora el validador. |
Ejemplos
import { defineManifest, ui, act } from "../_shared/sdk/index.js";
export default defineManifest({
id: "acme-hello",
name: "Hello",
version: "1.0.0",
permissions: ["READ_USER", "NOTIFY"],
api: { functions: { greet: { handler: "greet", timeout: 5000 } } },
mounts: [{ point: "COMPOSER_TOOLBAR", component: ui.button("Saludo", { onClick: act.callBackend("greet") }) }],
});Ver también
Usado en / Referenciado por
Fuente: bloomx-extensions/_shared/sdk/manifest.d.ts:419 · manifest.d.ts