41 lines
1.4 KiB
TypeScript
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),
|
|
);
|
|
}
|