import "server-only"; import { CANVAS_TOOLBAR_CONFIG_SETTING_KEY, isCanvasToolbarItemEnabled, normalizeCanvasToolbarConfig, type CanvasToolbarItemKey, } from "@/lib/canvas-toolbar-config"; import type { CanvasCapabilityDefinition } from "@/lib/canvas/capabilities/types"; import { getSystemSetting } from "@/lib/db/queries"; export async function isCanvasCapabilityEnabled( capability: CanvasCapabilityDefinition, source: "toolbar" | "agent" | "mcp" | "system" = "toolbar", ) { const enabledIds = await getEnabledCanvasCapabilityIds([capability], source); return enabledIds.has(capability.id); } export async function getEnabledCanvasCapabilityIds( capabilities: readonly CanvasCapabilityDefinition[], source: "toolbar" | "agent" | "mcp" | "system" = "toolbar", ) { // Toolbar visibility and Agent authorization are independent. Backend service switches still apply. if (source === "agent") return new Set(capabilities.filter((item) => item.agent.exposed).map((item) => item.id)); const setting = await getSystemSetting({ key: CANVAS_TOOLBAR_CONFIG_SETTING_KEY, }).catch(() => null); const config = normalizeCanvasToolbarConfig(setting?.value); return new Set( capabilities .filter( (capability) => !capability.toolbarSettingKey || isCanvasToolbarItemEnabled(config, capability.toolbarSettingKey as CanvasToolbarItemKey), ) .map((capability) => capability.id), ); }