ai-chatbot/lib/canvas/agent-feature-settings.ts

45 lines
1.4 KiB
TypeScript

import { inArray } from "drizzle-orm";
import { db } from "@/lib/db";
import { systemSettings } from "@/lib/db/schema";
import {
CANVAS_AGENT_FEATURE_SETTING_KEYS,
type CanvasAgentFeatureFlags,
type CanvasAgentFeatureSettingsLike,
getCanvasAgentFeatureFlags,
} from "@/lib/canvas/agent-feature-flags";
type EnvLike = Record<string, string | undefined>;
export async function readCanvasAgentFeatureSettings(): Promise<CanvasAgentFeatureSettingsLike> {
const rows = await db
.select({ key: systemSettings.key, value: systemSettings.value })
.from(systemSettings)
.where(inArray(systemSettings.key, [...CANVAS_AGENT_FEATURE_SETTING_KEYS]));
const settings: CanvasAgentFeatureSettingsLike = {};
rows.forEach((row) => {
if (
CANVAS_AGENT_FEATURE_SETTING_KEYS.includes(
row.key as (typeof CANVAS_AGENT_FEATURE_SETTING_KEYS)[number]
)
) {
settings[row.key as keyof CanvasAgentFeatureSettingsLike] = row.value;
}
});
return settings;
}
export async function getCanvasAgentFeatureFlagsFromSystemSettings(
env: EnvLike = process.env
): Promise<CanvasAgentFeatureFlags> {
try {
return getCanvasAgentFeatureFlags(env, await readCanvasAgentFeatureSettings());
} catch (error) {
console.warn(
"[CanvasAgentFeatureFlags] Failed to read SystemSettings, using env fallback:",
error
);
return getCanvasAgentFeatureFlags(env);
}
}