ai-chatbot/lib/canvas/capabilities/availability.ts

41 lines
1.4 KiB
TypeScript

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),
);
}