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