UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

57 lines (56 loc) • 3.7 kB
import { i as getPluginRegistryForContext } from "./gateway-request-scope-DV3FHtde.mjs"; import { a as capturePluginLifecycleAuthority } from "./registry-lifecycle-PK-HWmev.mjs"; import { n as GATEWAY_CLIENT_IDS } from "./client-info-BgcoFakQ.mjs"; import { $n as validatePluginsControlUiReloadParams, Qn as validatePluginsControlUiListParams, er as validatePluginsControlUiReportParams, tr as validatePluginsControlUiStatusParams } from "./src-D6kL8tMP.mjs"; import { t as ErrorCodes } from "./gateway-error-details-gTekQWj2.mjs"; import { d as errorShape } from "./error-codes-D0WRV4Bq.mjs"; import { n as defineValidatedGatewayHandler } from "./validation-UW_NLjlV.mjs"; import { a as reportControlUiPluginActivation, i as reloadControlUiPluginCatalog, n as listControlUiPluginActivations, r as listControlUiPluginCatalog } from "./control-ui-plugin-assets-C7gTjTAg.mjs"; //#region src/gateway/server-methods/plugins-control-ui.ts function captureCatalogAuthority() { const registry = getPluginRegistryForContext(); return registry ? capturePluginLifecycleAuthority(registry) ?? (() => false) : () => getPluginRegistryForContext() === null; } const pluginsControlUiHandlers = { "plugins.controlUi.report": defineValidatedGatewayHandler("plugins.controlUi.report", validatePluginsControlUiReportParams, ({ params, client, respond, context }) => { if (!(client?.connId && context.getClientConnIds?.((candidate) => candidate === client).has(client.connId)) || client.connect.client.id !== GATEWAY_CLIENT_IDS.CONTROL_UI) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "Activation reports require a connected Control UI")); return; } if (!reportControlUiPluginActivation(client, params)) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "Activation report is for an inactive browser revision")); return; } respond(true, { ok: true }); }), "plugins.controlUi.status": defineValidatedGatewayHandler("plugins.controlUi.status", validatePluginsControlUiStatusParams, ({ params, respond, context }) => { const clients = []; context.getClientConnIds?.((client) => { if (client.connId && client.connect.client.id === GATEWAY_CLIENT_IDS.CONTROL_UI) clients.push({ connId: client.connId, activations: listControlUiPluginActivations(client, params.pluginId) }); return false; }); if (clients.length > 128) { respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "Too many connected Control UI clients")); return; } respond(true, { clients: clients.toSorted((left, right) => left.connId.localeCompare(right.connId)) }); }), "plugins.controlUi.list": defineValidatedGatewayHandler("plugins.controlUi.list", validatePluginsControlUiListParams, async ({ respond }) => { const isCurrent = captureCatalogAuthority(); const catalog = await listControlUiPluginCatalog(); if (!isCurrent()) throw new Error("plugin registry was replaced"); respond(true, catalog); }, () => errorShape(ErrorCodes.UNAVAILABLE, "Control UI plugin catalog is unavailable")), "plugins.controlUi.reload": defineValidatedGatewayHandler("plugins.controlUi.reload", validatePluginsControlUiReloadParams, async ({ params, respond, context }) => { const isCurrent = captureCatalogAuthority(); const catalog = await reloadControlUiPluginCatalog(params.pluginId); if (!isCurrent()) throw new Error("plugin registry was replaced"); context.broadcast("plugins.controlUi.changed", { revision: catalog.revision }); respond(true, catalog); }, () => errorShape(ErrorCodes.UNAVAILABLE, "Control UI reload failed. Confirm the plugin is active, build its browser assets, and retry.")) }; //#endregion export { pluginsControlUiHandlers };