39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import path from "node:path";
|
|
|
|
export interface AppConfig {
|
|
basePath: string;
|
|
baseUrl: string;
|
|
port: number;
|
|
dataDir: string;
|
|
htmlDir: string;
|
|
screenshotDir: string;
|
|
cacheDir: string;
|
|
dbPath: string;
|
|
adminToken: string;
|
|
captureTimeoutMs: number;
|
|
maxScreenshotHeight: number;
|
|
}
|
|
|
|
function intEnv(name: string, fallback: number): number {
|
|
const raw = process.env[name];
|
|
if (!raw) return fallback;
|
|
const parsed = Number.parseInt(raw, 10);
|
|
return Number.isFinite(parsed) ? parsed : fallback;
|
|
}
|
|
|
|
const dataDir = process.env.AISHARE_DATA_DIR || path.resolve("data");
|
|
|
|
export const config: AppConfig = {
|
|
basePath: "/aishare",
|
|
baseUrl: (process.env.AISHARE_BASE_URL || "http://127.0.0.1:8088/aishare").replace(/\/$/, ""),
|
|
port: intEnv("AISHARE_PORT", 8080),
|
|
dataDir,
|
|
htmlDir: path.join(dataDir, "html"),
|
|
screenshotDir: path.join(dataDir, "screenshots"),
|
|
cacheDir: path.join(dataDir, "cache"),
|
|
dbPath: path.join(dataDir, "aishare.db"),
|
|
adminToken: process.env.AISHARE_ADMIN_TOKEN || "",
|
|
captureTimeoutMs: intEnv("AISHARE_CAPTURE_TIMEOUT_MS", 180_000),
|
|
maxScreenshotHeight: intEnv("AISHARE_MAX_SCREENSHOT_HEIGHT", 60_000)
|
|
};
|