52 lines
1.1 KiB
TypeScript
52 lines
1.1 KiB
TypeScript
export type Config = {
|
|
apiKey: string;
|
|
baseURL: string;
|
|
model: string;
|
|
};
|
|
|
|
const DEFAULT_MODEL = "gemini-3.0-pro-image-landscape";
|
|
|
|
function getRequiredEnv(primaryName: string, fallbackName?: string): string {
|
|
const primaryValue = Bun.env[primaryName]?.trim();
|
|
|
|
if (primaryValue) {
|
|
return primaryValue;
|
|
}
|
|
|
|
if (fallbackName) {
|
|
const fallbackValue = Bun.env[fallbackName]?.trim();
|
|
|
|
if (fallbackValue) {
|
|
return fallbackValue;
|
|
}
|
|
}
|
|
|
|
throw new Error(
|
|
`Missing required environment variable: ${primaryName}${fallbackName ? ` (or ${fallbackName})` : ""}`,
|
|
);
|
|
}
|
|
|
|
export function normalizeBaseUrl(baseURL: string): string {
|
|
const url = new URL(baseURL);
|
|
|
|
if (url.pathname === "" || url.pathname === "/") {
|
|
url.pathname = "/v1";
|
|
}
|
|
|
|
return url.toString().replace(/\/$/, "");
|
|
}
|
|
|
|
export function loadConfig(): Config {
|
|
return {
|
|
apiKey: getRequiredEnv("FLOW2API_API_KEY", "OPENAI_API_KEY"),
|
|
baseURL: normalizeBaseUrl(
|
|
getRequiredEnv("FLOW2API_BASE_URL", "OPENAI_BASE_URL"),
|
|
),
|
|
model:
|
|
Bun.env.FLOW2API_MODEL?.trim() ||
|
|
Bun.env.GEMINI_MODEL?.trim() ||
|
|
Bun.env.OPENAI_MODEL?.trim() ||
|
|
DEFAULT_MODEL,
|
|
};
|
|
}
|